2013-04-04 22 views
46

Come faccio a far corrispondere anche i numeri negativi con questa espressione regolare? Questo regex funziona bene con valori positivi, ma voglio anche consentire valori negativi, ad es. -10, -125,5 eccCome includere i numeri decimali negativi in ​​questa espressione regolare?

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

Grazie

+0

Hai provato qualcosa? Sembra che dovrebbe essere un problema piuttosto semplice ... –

+0

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

+0

http://www.regexper.com/ –

risposta

87

Si dovrebbe aggiungere un trattino opzionale all'inizio aggiungendo -? (? è un quantifier significa uno o zero occorrenze):

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

L'ho verificato in Rubular con questi valori:

10.00 
-10.00 

ed entrambi corrispondono come previsto.

+2

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

+9

Se è possibile che sia necessario acquisire numeri esplicitamente possibili (+10,00, utilizzati in alcune applicazioni), è possibile usare '^ [- +]? [0-9] \ d * (\. \ D +)? $ – Cemafor

+1

Bella risposta +1. –

77

Alcuni esempi espressione regolare:

interi positivi:

^\d+$ 

interi negativi:

^-\d+$ 

interi:

^-?\d+$ 

positivo Numero:

^\d*\.?\d+$ 

numero negativo:

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

numero positivo o negativo Numero:

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

Telefono:

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

Telefono con prefisso:

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

Anno 1900-2099:

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

Data (gg mm aaaa, d/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}$ 
8

Non so il motivo per cui è necessario che prima [0-9].

Prova:

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

Aggiornamento

Se si vuole essere sicuri che avrete una cifra sul luogo quelli, quindi utilizzare

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

Probabilmente solo per garantire una cifra in quella posizione, '^ -? \ D + (\. \ D +)?$ 'dovrebbe funzionare se questo è il caso – Cemafor

+0

@Cemafor Infatti, grazie. Aggiornato la risposta –

0

Basta aggiungere un 0 o 1 token:

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

Andre mi ha battuto, anche lui ha ragione, non c'è bisogno del token [0-9]. – BanksySan

1

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

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

AGGIORNAMENTO (13/08/2014): Questo è il codice migliore per i 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 benissimo:

-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 
+0

Cambia '- *' a '-?' Perché corrisponde a '-------------'. – Toto

+0

Ho apportato alcune modifiche aggiuntive e ora funziona correttamente. Si prega di controllare che =) –

1

Questo ti pe w entrambi interi positivi e negativi

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

1

Ho alcuni esperimenti su regex in Django url, che richiesta da negativo a numeri positivi

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

Let ci siamo concentrati su questo (\-\d+|\d+) parte e altri ignorando, questo punto e virgola | significa O in regex, quindi il valore negativo corrisponderà wi questa parte \-\d+ e il valore positivo in questo \d+

0

Solo per il numero negativo, questo è perfetto.

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

accetta valori decimali positivi o negativi.

0

espressione regolare per il numero, punto decimale opzionale, negativo optional:

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

opere per intero negativo, decimale, negativa con decimali

Problemi correlati