¿Cómo incluyo números decimales negativos en esta expresión regular?

89

¿Cómo hago coincidir también los números negativos con esta expresión regular? Esta expresión regular funciona bien con valores positivos, pero quiero que también permita valores negativos, por ejemplo, -10, -125.5, etc.

^[0-9]\d*(\.\d+)?$

Gracias

usuario1786107
fuente
1
@DanPuzey ¿No vio la expresión regular que publicó?
Nolonar
regexper.com
Dave Bish
Intenté agregar [-] al principio, pero esto no funcionó. También probé una combinación de pequeños cambios
user1786107
prueba esto ^ -? \ d + (\. \ d +)? $
Civa
@DanPuzey tus palabras no añaden nada a la discusión y no son amables
Wassadamo

Respuestas:

173

Debe agregar un guión opcional al principio agregando -?( ?es un cuantificador que significa una o cero ocurrencias ):

^-?[0-9]\d*(\.\d+)?$

Lo verifiqué en Rubular con estos valores:

10.00
-10.00

y ambos coincidieron como se esperaba.

Mike Perrenoud
fuente
2
deberías escapar del punto, es decir^-?[0-9]\d*(\.\d+)?$
Alex Shesterov
14
Si existe la posibilidad de que sea necesario capturar números explícitamente positivos (+10,00, utilizado en algunas aplicaciones), puede utilizar^[-+]?[0-9]\d*(\.\d+)?$
Cemafor
127

Algunos ejemplos de expresiones regulares:

Enteros positivos :

^\d+$

Enteros negativos :

^-\d+$

Entero :

^-?\d+$

Número positivo :

^\d*\.?\d+$

Número negativo :

^-\d*\.?\d+$

Número positivo o número negativo :

^-?\d*\.{0,1}\d+$

Número de teléfono :

^\+?[\d\s]{3,}$

Teléfono con código :

^\+?[\d\s]+\(?[\d\s]{10,}$

Año 1900-2099 :

^(19|20)[\d]{2,2}$

Fecha (dd mm aaaa, d / m / aaaa, etc.):

^([1-9]|0[1-9]|[12][0-9]|3[01])\D([1-9]|0[1-9]|1[012])\D(19[0-9][0-9]|20[0-9][0-9])$

IP v4 :

^(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]){3}$
KF2
fuente
11

No sé por qué lo necesitas primero [0-9].

Tratar:

^-?\d*(\.\d+)?$

Actualizar

Si desea asegurarse de tener un dígito en el lugar de las unidades, utilice

^-?\d+(\.\d+)?$
Andre Calil
fuente
1
Probablemente solo para garantizar un dígito en el lugar ^-?\d+(\.\d+)?$de las
unidades
Respuesta más adecuada. No creo que [0-9] sea necesario como se muestra en la respuesta aceptada.
UzumakiL
3

ACTUALIZADO (13/08/2014): Este es el mejor código para números positivos y negativos =)

(^-?0\.[0-9]*[1-9]+[0-9]*$)|(^-?[1-9]+[0-9]*((\.[0-9]*[1-9]+[0-9]*$)|(\.[0-9]+)))|(^-?[1-9]+[0-9]*$)|(^0$){1}

Intenté con estos números y funciona bien:

-1234454.3435
-98.99
-12.9
-12.34
-10.001
-3
-0.001
-000
-0.00
0
0.00
00000001.1
0.01
1201.0000001
1234454.3435
7638.98701
Pacho Zuñiga
fuente
Cambie -*a -?porque coincide -------------.
Toto
Hice algunos cambios adicionales y ahora funciona bien. Por favor verifique que =)
Pacho Zuñiga
1

Esto permitirá un carácter -o +solo cuando esté seguido de un número:

 ^([+-](?=\.?\d))?(\d+)?(\.\d+)?$
Ian Timothy
fuente
1

Esto permitirá números enteros positivos y negativos

ValidationExpression = "^ -? [0-9] \ d * (\ d +)? $"

Prajwal Rai
fuente
1

Tengo algunos experimentos sobre expresiones regulares en la url de django, que requieren números negativos a positivos

^(?P<pid>(\-\d+|\d+))$

Centrémonos en esta (\-\d+|\d+)parte e ignoremos otras, este punto y coma |significa OR en expresión regular, entonces el valor negativo coincidirá con esta \-\d+parte y el valor positivo en esta\d+

Aditya Kresna Permana
fuente
0

Simplemente agregue un token 0 o 1:

^-?[0-9]\d*(.\d+)?$
BanksySan
fuente
Andre se me adelantó, él también tiene razón, no necesita la ficha [0-9].
BanksySan
0

Solo para números negativos, esto es perfecto.

^-\d*\.?\d+$
Kamleshkumar Gujarathi
fuente
0
^[+-]?\d{1,18}(\.\d{1,2})?$

acepta valores decimales positivos o negativos.

Deepak Tambe
fuente
0

Expresión regular para número, punto decimal opcional, negativo opcional:

^-?(\d*\.)?\d+$;

funciona para entero negativo, decimal, negativo con decimal

Vivesh
fuente
0
^(-?\d+\.)?-?\d+$

permitir:

23425.23425
10.10
100
0
0.00
-100
-10.10
10.-10
-10.-10
-23425.23425
-23425.-23425
0.234
alquimista
fuente
0

Si tienes esto val="-12XXX.0abc23"y quieres extraer solo el número decimal, en este caso esta expresión regular ( ^-?[0-9]\d*(\.\d+)?$) no te ayudará a lograrlo.
este es el código correcto con la expresión regular de detección correcta:

var val="-12XXX.0abc23";
val = val.replace(/^\.|[^-?\d\.]|\.(?=.*\.)|^0+(?=\d)/g, '');
console.log(val);

Albahaca
fuente