Regex für eine Zahl mit Nachkommastellen und Tausendertrennzeichen
Brauche ich regex zu validieren, eine Zahl, die enthalten könnte Tausendertrennzeichen oder Dezimalzahlen mit javascript.
Max-Wert wird 9,999,999.99
Min-Wert 0.01
Andere gültige Werte:
11,111
11.1
1,111.11
UNGÜLTIGE Werte:
1111
1111,11
,111
111,
Ich habe gesucht alle über mit keine Freude.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Über die minimalen und maximalen Werte... Naja, ich würde es nicht mit einem regex, aber Sie können hinzufügen lookaheads am Anfang:
Hinweis: dies ermöglicht
0,999.00
, so möchten Sie vielleicht, um es zu ändern:die nicht erlauben würde, ein führender 0.
Edit:
Tests: http://jsfiddle.net/pKsYq/2/
0
Werte. Der Festsetzung.console.log
durchalert
wenn Sie bevorzugen...0,01
sollte nicht0.01
funktioniert. Ich habe festgestellt, der Ursprung des Problems für9,999,999.99
, daran zu arbeiten.Arbeitete er auf ein paar, aber ich bin immer noch lernen, regex ebenso.
Die Logik sollte 1-3 Ziffern 0-1 mal, 1 Komma gefolgt von 3 Ziffern einer beliebigen Anzahl von Zeiten, und eine single . gefolgt von einer beliebigen Anzahl von Ziffern 0-1 mal
Habe ich unten regrex für folgende retrictions -
In ein Aktuelles Projekt benötigten wir eine änderung dieser version, um den internationalen Anforderungen.
Dies ist, was wir verwendet:
^-?(\d{1,3}(?<tt>\.|\,| ))((\d{3}\k<tt>)*(\d{3}(?!\k<tt>)[\.|\,]))?\d*$
Erstellen einer benannten Gruppe
(?<tt>\.|\,| )
konnten wir die negativen look-ahead -(?!\k<tt>)[\.|\,])
später, um sicherzustellen, das Tausendertrennzeichen und das Dezimaltrennzeichen werden in der Tat anders.Zunächst möchte ich darauf hinweisen, dass wenn Sie eigenen form die Daten kommen, ist der beste Weg, um zu beschränken sich die Eingaben auf das korrekte Formular-Elemente (aka, Zahl-Feld)
Ob "," eingegeben werden können, basiert auf dem browser, aber der browser wird immer geben Sie den Wert als eine tatsächliche Anzahl. (Denken Sie daran, dass alle form-Daten validiert werden müssen/sanitized server-Seite als auch. Vertrauen Sie nie dem Kunden)
Zweiten würde ich gerne erweitern auf die anderen Antworten, um eine robustere (Plattform-unabhängig)/modifizierbar regex.
^<my_regex>$
(<regex>)?
\.\d+
[1-9]
für "ein nicht-null-Nummer", so\.\d+[1-9]
([1-9]<rest-of-number-regex>|0)
[1-9]\d{0,2}
(,\d{3})*
(,?\d{3})*
Alles zusammen
Tezra die Formel nicht für '1.' oder '1.0'. Für meine Zwecke, ich Erlaube führende und nachfolgende Nullen sowie ein führendes + oder - Zeichen, etwa so: