Come faccio a includere numeri decimali negativi in ​​questa espressione regolare?


90

Come faccio ad abbinare anche i numeri negativi con questa espressione regolare? Questa regex funziona bene con valori positivi, ma voglio che consenta anche valori negativi, ad esempio -10, -125,5 ecc.

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

Grazie


1
@DanPuzey Non hai visto il Regex che ha pubblicato?
Nolonar


Ho provato ad aggiungere [-] all'inizio ma non ha funzionato. Ho anche provato una combinazione di piccole modifiche
user1786107

prova questo ^ -? \ d + (\. \ d +)? $
Civa

@DanPuzey le tue parole non aggiungono nulla alla discussione e sono scortesi
Wassadamo

Risposte:


176

È necessario aggiungere un trattino opzionale all'inizio aggiungendo -?( ?è un quantificatore che significa una o zero occorrenze ):

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

L'ho verificato in Rubular con questi valori:

10.00
-10.00

ed entrambi corrispondevano come previsto.


2
dovresti sfuggire al punto, cioè^-?[0-9]\d*(\.\d+)?$
Alex Shesterov

14
Se è possibile che sia necessario acquisire numeri esplicitamente possitivi (+10.00, utilizzato in alcune applicazioni) è possibile utilizzare^[-+]?[0-9]\d*(\.\d+)?$
Cema per

129

Alcuni esempi di espressioni regolari:

Numeri interi positivi :

^\d+$

Numeri interi negativi :

^-\d+$

Intero :

^-?\d+$

Numero positivo :

^\d*\.?\d+$

Numero negativo :

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

Numero positivo o numero negativo :

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

Numero di telefono :

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

Telefono con codice :

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

Anno 1900-2099 :

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

Data (gg mm aaaa, g / m / aaaa, ecc.):

^([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

Non so perché prima ne hai bisogno [0-9].

Provare:

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

Aggiornare

Se vuoi essere sicuro di avere una cifra nella posizione delle unità, usa

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

1
Probabilmente solo per garantire una cifra al posto delle unità, ^-?\d+(\.\d+)?$dovrebbe funzionare se è così
Cema per il

Risposta più azzeccata. Non penso che [0-9] sia necessario come mostrato nella risposta accettata.
UzumakiL

3

AGGIORNATO (13/08/2014): Questo è il miglior codice per numeri positivi e negativi =)

(^-?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}

Ho provato con questi numeri e funziona bene:

-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

Cambia -*in -?perché corrisponde -------------.
Toto

Ho apportato alcune modifiche aggiuntive e ora funziona bene. Si prega di controllare che =)
Pacho Zuñiga

1

Ciò consentirà un carattere -o +solo quando seguito da un numero:

 ^([+-](?=\.?\d))?(\d+)?(\.\d+)?$

1

Ciò consentirà numeri interi positivi e negativi

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


1

Ho alcuni esperimenti su regex nell'URL di Django, che richiedeva numeri da negativi a positivi

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

Concentriamoci su questa (\-\d+|\d+)parte e ignorandone le altre, questo punto e virgola |significa OR in regex, quindi il valore negativo corrisponderà a questa \-\d+parte e il valore positivo a questa\d+



1

Se hai questo val="-12XXX.0abc23"e vuoi estrarre solo il numero decimale, in questo caso questa regex ( ^-?[0-9]\d*(\.\d+)?$) non ti aiuterà a raggiungerlo.
questo è il codice corretto con la corretta regex di rilevamento:

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


0

Basta aggiungere un token 0 o 1:

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

Andre mi ha battuto, ha ragione anche lui, non serve il gettone [0-9].
BanksySan


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

accetta valori decimali positivi o negativi.


0

Espressione regolare per numero, punto decimale opzionale, negativo opzionale:

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

funziona per intero negativo, decimale, negativo con decimale


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

permettere:

23425.23425
10.10
100
0
0.00
-100
-10.10
10.-10
-10.-10
-23425.23425
-23425.-23425
0.234
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.