web-dev-qa-db-de.com

regulärer Ausdruck zum Finden von Dezimal-/Gleitkommazahlen?

ich brauche einen regulären Ausdruck für Dezimal-/Gleitkommazahlen wie 12 12.2 1236.32 123.333 und +12.00 oder -12.00 oder ... 123.123 ... für die Verwendung in Javascript und jQuery . Vielen Dank.

25
MBehtemam

Optional können Sie am Anfang ein + oder - angeben, gefolgt von einer oder mehreren Dezimalstellen, optional gefolgt von einem Dezimalzeichen und einer oder mehreren Dezimalstellen am Ende des Strings:

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

RegexPal

60
Paulpro

Der richtige Ausdruck sollte wie folgt sein:

[+-]?([0-9]*[.])?[0-9]+

dies gilt für:

+1
+1.
+.1
+0.1
1
1.
.1
0.1

Hier ist Python-Beispiel:

import re
#print if found
print(bool(re.search(r'[+-]?([0-9]*[.])?[0-9]+', '1.0')))
#print result
print(re.search(r'[+-]?([0-9]*[.])?[0-9]+', '1.0').group(0))

Ausgabe:

True
1.0

Wenn Sie Mac verwenden, können Sie in der Befehlszeile testen:

python -c "import re; print(bool(re.search(r'[+-]?([0-9]*[.])?[0-9]+', '1.0')))"

python -c "import re; print(re.search(r'[+-]?([0-9]*[.])?[0-9]+', '1.0').group(0))"
4
lbsweek

Mit isNaN können Sie die Textvalidierung sowie nur eine Dezimalpunktvalidierung überprüfen

var val = $('#textbox').val();
var floatValues =  /[+-]?([0-9]*[.])?[0-9]+/;
 if (val.match(floatValues) && !isNaN(val)) {
  // your function
}
2
Swathi

Die Antworten von Paulpro und lbsweek führten mich dazu:

re=/^[+-]?(?:\d*\.)?\d+$/;
>> /^[+-]?(?:\d*\.)?\d+$/

re.exec("1")
>> Array [ "1" ]

re.exec("1.5")
>> Array [ "1.5" ]

re.exec("-1")
>> Array [ "-1" ]

re.exec("-1.5")
>> Array [ "-1.5" ]

re.exec(".5")
>> Array [ ".5" ]

re.exec("")
>> null

re.exec("qsdq")
>> null
0
duparq

Dies ist ein alter Beitrag, aber es war das Top-Suchergebnis für "reguläre Ausdrücke für Gleitkommazahlen" oder ähnliches und beantwortet meine Frage nicht ganz. Da ich es ausgearbeitet habe, werde ich mein Ergebnis für das nächste Mal teilen Person, die auf diesen Thread stößt, muss es nicht selbst herausfinden.

Alle bisherigen Antworten akzeptieren einen führenden 0 Für Zahlen mit zwei (oder mehr) Stellen links vom Dezimalpunkt (z. B. 0123 Statt nur 123) ist nicht wirklich gültig und wird in einigen Kontexten verwendet, um anzuzeigen, dass die Zahl im Oktalformat (Basis 8) und nicht im regulären Dezimalformat (Basis 10) vorliegt.

Auch diese Ausdrücke akzeptieren eine Dezimalstelle ohne führende Null (.14 Anstelle von 0.14) Oder ohne einen nachgestellten Bruchteil (3. Anstelle von 3.0). Dies gilt in einigen Programmierzusammenhängen (einschließlich JavaScript), aber ich möchte dies nicht zulassen (da es für meine Zwecke wahrscheinlicher ist, dass dies ein Fehler ist als beabsichtigt).

Wenn Sie "wissenschaftliche Notation" wie 1.234E7 Ignorieren, finden Sie hier einen Ausdruck, der meinen Kriterien entspricht:

/^((-)?(0|([1-9][0-9]*))(\.[0-9]+)?)$/

oder wenn Sie wirklich einen führenden + akzeptieren wollen, dann:

/^((\+|-)?(0|([1-9][0-9]*))(\.[0-9]+)?)$/

Ich glaube, dass reguläre Ausdrücke einen strengen Test für die typische Gleitkommazahl im Integer- oder Dezimalstil durchführen.

Wenn abgestimmt:

  • $1 Enthält die vollständige übereinstimmende Nummer
  • $2 Enthält das (möglicherweise leere) Vorzeichen (+/-)
  • $3 Enthält den Wert links vom Dezimalpunkt
  • $5 Enthält den Wert rechts vom Dezimalpunkt, einschließlich des führenden .

Mit "streng" meine ich, dass die Zahl das einzige sein muss, was in der zu testenden Zeichenfolge enthalten ist.

Wenn Sie nur den Gleitkommawert aus einer Zeichenfolge extrahieren möchten, die anderen Inhalt enthält, verwenden Sie diesen Ausdruck:

/((\b|\+|-)(0|([1-9][0-9]*))(\.[0-9]+)?)\b/

Welches findet -3.14 In "negative pi is approximately -3.14." Oder in "(-3.14)" etc.

Die nummerierten Gruppen haben die gleiche Bedeutung wie oben (außer dass $2 Jetzt eine leere Zeichenfolge ist (""), Wenn kein führendes Zeichen anstelle von null vorhanden ist).

Beachten Sie jedoch, dass auch versucht wird, die gefundenen Zahlen zu extrahieren. Beispielsweise wird 127.0 Aus 127.0.0.1 Extrahiert.

Wenn Sie etwas Anspruchsvolleres wollen, sollten Sie sich vielleicht die lexikalische Analyse anstatt regulärer Ausdrücke ansehen. Ich vermute, man könnte einen Look-Ahead-basierten Ausdruck erstellen, der erkennt, dass "Pi is 3.14." Eine Gleitkommazahl enthält, Home is 127.0.0.1. Jedoch nicht, aber bestenfalls komplex. Wenn Ihr Muster von den Zeichen abhängt, die auf nicht unbedeutende Weise danach kommen, beginnen Sie, sich außerhalb des Sweetspots von regulären Ausdrücken zu wagen.

0
Rod