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


1
@DanPuzey Hast du den Regex, den er gepostet hat, nicht gesehen?
Nolonar


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.


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

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

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

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

1

Dies erlaubt sowohl positive als auch negative ganze Zahlen

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


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+



0

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

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

Andre hat mich geschlagen, er hat auch Recht, er braucht den [0-9] -Token nicht.
BanksySan


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

akzeptiert positive oder negative Dezimalwerte.


0

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

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

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


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

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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.