Wie füge ich negative Dezimalzahlen in diesen regulären Ausdruck ein?

84

Wie kann ich mit diesem regulären Ausdruck auch negative Zahlen abgleichen? Dieser reguläre Ausdruck funktioniert gut mit positiven Werten, aber ich möchte, dass er auch negative Werte zulässt, z. B. -10, -125,5 usw.

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

Vielen Dank

user1786107
quelle
1
@DanPuzey Hast du den Regex, den er gepostet hat, nicht gesehen?
Nolonar
regexper.com
Dave Bish
Ich habe versucht, [-] am Anfang hinzuzufügen, aber das hat nicht funktioniert. Ich habe auch versucht, eine Kombination von kleinen Änderungen
Benutzer1786107
versuchen Sie dies ^ -? \ d + (\. \ d +)? $
Civa
@ DanPuzey Ihre Worte tragen nichts zur Diskussion bei und sind unfreundlich
Wassadamo

Antworten:

167

Sie sollten zu Beginn einen optionalen Bindestrich hinzufügen, indem Sie hinzufügen -?( ?ist ein Quantifizierer , der ein oder null Vorkommen bedeutet ):

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

Ich habe es in Rubular mit folgenden Werten überprüft:

10.00
-10.00

und beide stimmten wie erwartet überein.

Mike Perrenoud
quelle
2
Sie sollten dem Punkt entkommen, dh^-?[0-9]\d*(\.\d+)?$
Alex Shesterov
14
Wenn es möglich ist, explizit mögliche Zahlen zu erfassen (+10.00, in einigen Anwendungen verwendet), können Sie^[-+]?[0-9]\d*(\.\d+)?$
Cemafor
124

Einige Beispiele für reguläre Ausdrücke:

Positive Ganzzahlen :

^\d+$

Negative Ganzzahlen :

^-\d+$

Ganzzahl :

^-?\d+$

Positive Zahl :

^\d*\.?\d+$

Negative Zahl :

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

Positive oder negative Zahl :

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

Telefonnummer :

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

Telefon mit Code :

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

Jahr 1900-2099 :

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

Datum (TT MM JJJJ, TT / MM / JJJJ usw.):

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

Ich weiß nicht, warum du das zuerst brauchst [0-9].

Versuchen:

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

Aktualisieren

Wenn Sie sicher sein möchten, dass Sie eine Ziffer an der Stelle haben, verwenden Sie

^-?\d+(.\d+)?$
Andre Calil
quelle
1
Wahrscheinlich nur, um eine Ziffer an der einen Stelle zu garantieren, ^-?\d+(\.\d+)?$sollte funktionieren, wenn das der Fall ist
Cemafor
Die passendste Antwort. Ich denke nicht, dass [0-9] notwendig ist, wie in der akzeptierten Antwort gezeigt.
UzumakiL
2

AKTUALISIERT (13/08/2014): Dies ist der beste Code für positive und negative Zahlen =)

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

Ich habe es mit diesen Zahlen versucht und funktioniert gut:

-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
quelle
Wechseln Sie -*zu, -?weil es übereinstimmt -------------.
Toto
Ich habe einige zusätzliche Änderungen vorgenommen und funktioniert jetzt einwandfrei. Bitte überprüfen Sie das =)
Pacho Zuñiga
1

Dies erlaubt ein -oder +Zeichen nur, wenn eine Zahl folgt:

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

Dies erlaubt sowohl positive als auch negative ganze Zahlen

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

Prajwal Rai
quelle
1

Ich habe einige Experimente über Regex in der Django-URL, die negative bis positive Zahlen erforderten

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

Konzentrieren wir uns auf diesen (\-\d+|\d+)Teil und ignorieren andere. Dieses Semikolon |bedeutet ODER in Regex. Dann stimmt der negative Wert mit diesem \-\d+Teil überein und der positive Wert in diesen\d+

Aditya Kresna Permana
quelle
0

Fügen Sie einfach einen 0- oder 1-Token hinzu:

^-?[0-9]\d*(.\d+)?$
BanksySan
quelle
Andre hat mich geschlagen, er hat auch Recht, er braucht den [0-9] -Token nicht.
BanksySan
0

Nur für negative Zahlen ist dies perfekt.

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

akzeptiert positive oder negative Dezimalwerte.

Deepak Tambe
quelle
0

Regulärer Ausdruck für Zahl, optionaler Dezimalpunkt, optionales Negativ:

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

funktioniert für negative Ganzzahl, Dezimalzahl, Negativ mit Dezimalzahl

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

ermöglichen:

23425.23425
10.10
100
0
0.00
-100
-10.10
10.-10
-10.-10
-23425.23425
-23425.-23425
0.234
Alchimist
quelle
0

Wenn Sie dies haben val="-12XXX.0abc23"und nur die Dezimalzahl extrahieren möchten, ^-?[0-9]\d*(\.\d+)?$hilft Ihnen dieser reguläre Ausdruck ( ) in diesem Fall nicht, dies zu erreichen.
Dies ist der richtige Code mit dem richtigen Erkennungs-Regex:

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

Basilikum
quelle