¿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


1
@DanPuzey ¿No vio la expresión regular que publicó?
Nolonar


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.


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}$

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+)?$

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

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+)?$

1

Esto permitirá números enteros positivos y negativos

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


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+



0

Simplemente agregue un token 0 o 1:

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

Andre se me adelantó, él también tiene razón, no necesita la ficha [0-9].
BanksySan


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

acepta valores decimales positivos o negativos.


0

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

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

funciona para entero negativo, decimal, negativo con decimal


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

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);

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.