2010-03-31 35 views
50

funciona esto:Javascript expresiones regulares - reemplazar los caracteres no numéricos

var.replace(/[^0-9]+/g, ''); 

Este recorte sencillo reemplazará cualquier cosa que no es un número sin nada.

Pero los decimales también son reales. Entonces, estoy tratando de descubrir cómo incluir un punto.

Estoy seguro de que es muy simple, pero mis pruebas no funcionan.

+0

¿Está buscando un solo número o varios? Es decir. para "12.3 a b5", ¿desea devolver "12.3 5" o "12.35", o la cadena de entrada no es posible? – tloflin

Respuesta

69

¿Escapó del período? var.replace(/[^0-9\.]+/g, '');

+0

escaparse del período es innecesario, creo. – Lane

4

Prueba esto:

var.replace(/[^0-9\\.]+/g, ''); 
2

Prueba esto:

var.replace(/[0-9]*\.?[0-9]+/g, ''); 

que sólo coincide con decimales válidos (por ejemplo, "1", "1.0", "0.5" , pero no" 1.0. 22")

+1

En realidad, esto coincide con B.006 o blah123. Él está buscando el caso negativo. –

+2

Ooh ... Leí mal la pregunta. Ay. – Eric

2

Si no se desea capturar la dirección IP junto con decimales:

var.replace(/[^0-9]+\\.?[0-9]*/g, ''); 

que sólo coger números con uno o cero períodos

+0

Esto está mal. Esto coincide con no números, seguido de un posible período, seguido de números. El póster quiere reemplazar todos los NON-números sin nada. –

+0

Gracias. Yo malentendí la pregunta. – dkinzer

+0

Aunque creo que esto dice que coincide con cualquier cosa que comience con uno o más números, seguido de 0 o 1 punto seguido de 0 o más números. – dkinzer

8

Sustitución de algo que no es un número es un poco más difícil de reemplazar algo que es un número.

Aquellos que sugieren simplemente agregar el punto, están ignorando el hecho de que. también se utiliza como un período, entonces:

This is a test. 0.9, 1, 2, 3 se convertirá en .0.9123.

La expresión regular específica en su problema dependerá mucho de la finalidad. Si sólo tiene un único número en la cadena, se puede hacer esto:

var.replace(/.*?(([0-9]*\.)?[0-9]+).*/g, "$1")

Esto encuentra el primer número, y reemplaza toda la cadena con el número que coincide.

0

¿Cómo hacer esto:

var numbers = str.gsub(/[0-9]*\.?[0-9]+/, "#{0} "); 
0

dulce y corta en línea en sustitución de caracteres no numéricos en el cuadro de texto ASP.Net:

<asp:TextBox ID="txtJobNo" runat="server" class="TextBoxStyle" onkeyup="this.value=this.value.replace(/[^0-9]/g,'')" /> 

Alter la parte de expresiones regulares como you'ld gusta. Muchas personas se quejan de que el cursor va directo al final cuando se utilizan las teclas de flecha, pero la gente tiende a lidiar con esto sin darse cuenta, por ejemplo, flecha ... flecha ... flecha ... está bien, entonces ... retroceda espacio atrás, ingrese los nuevos caracteres.

0

ya hay muchas respuestas correctas, solo indicando que es posible que también deba dar cuenta de signos negativos. "\-" agréguelo a cualquier respuesta existente para permitir números negativos.

0

Aquí hay un par de tipos de clase de entrada de jQuery que utilizo:

$("input.intgr").keyup(function (e) { // Filter non-digits from input value. 
    if (/\D/g.test($(this).val())) $(this).val($(this).val().replace(/\D/g, '')); 
}); 
$("input.nmbr").keyup(function (e) { // Filter non-numeric from input value. 
    var tVal=$(this).val(); 
    if (tVal!="" && isNaN(tVal)){ 
     tVal=(tVal.substr(0,1).replace(/[^0-9\.\-]/, '')+tVal.substr(1).replace(/[^0-9\.]/, '')); 
     var raVal=tVal.split(".") 
     if(raVal.length>2) 
      tVal=raVal[0]+"."+raVal.slice(1).join(""); 
     $(this).val(tVal); 
    } 
}); 

intgr permite solamente numérico - al igual que otras soluciones aquí.

nmbr permite solo el decimal positivo/negativo. Negativo debe ser el primer carácter (se puede añadir "+" para el filtro si lo necesita), tiras -3.6.23.333--3.623333

Estoy poniendo nmbr porque me cansé de tratar de encontrar la manera de mantener solo 1 decimal y negativo en 1ra posición

Cuestiones relacionadas