Hinweise für eine komplexe Währung regulären Ausdruck für Javascript?
-
06-07-2019 - |
Frage
Ich brauche eine unendliche Anzahl von Figuren in einer Web-Seite entsprechen.
Ich muss in der Lage, alle der folgenden Formate entsprechen:
100 $
99$
$99
$ 8
$.99
$ .8
$ 99.8
.99$
.99 $
9.2 $
1.2$
Und das äquivalent mit Kommas:
444,333
22,333
1,222
11,111,111
333,333,333,333.01132
oder Leerzeichen:
444 333
22 333
1 222
11 111 111
333 333 333 333.01132
Dies ist ein wirklich hart für mich. Ich bin zu spielen mit regexp verwendet, aber ich habe völlig versagt etwas kugelsicher zu schreiben. Normalerweise http://www.regexlib.com hat die Lösung, aber nicht für diese ein.
kann ich nicht denken Sie an eine andere Art und Weise anders als regexp verwenden, da es eine einfache Textsuche ist / ersetzen.
Lösung
Hier ist ein regulärer Ausdruck, der alle Zahlenformate entsprechen, werden Sie zur Verfügung gestellt haben:
^(?:\$\s*)?(?:(?:\d{0,3}(?:[, ]\d{0,3})*[, ])+\d{3}|\d+)(?:\.\d*)?(?:\s*\$)?$
Um es zu brechen:
-
^(?:\$\s*)?
für ein optionales $ zu Beginn des Strings aussehen wird, um eine beliebige Menge von Räumen gefolgt
so 123456789, 123 456 789 und 123456789 wären alles abgestimmt - durch ein Komma oder Leerzeichen ( -
\d+
entweder eine Nummer übereinstimmen. Der reguläre Ausdruck wird nicht akzeptieren Zahlen mit unangebrachter Gruppierung (so 123,45,6789 nicht angepasst werden) -
(?:\.\d*)?
wird eine Zahl mit einem optionalen dezimalen und einem beliebigen Anzahl von Zahlen nach entspricht
-
(?:\s*\$)?$
wird durch jede Menge Raum ein optionalen $ am Ende des Strings voran entsprechen.
(?:(?:\d{0,3}(?:[, ]\d{0,3])*[, ])+\d{3}|\d*)
) oder eine Reihe von Zahlen (\d{0,3}(?:[, ]\d{0,3})*[, ])+\d{3}
) getrennt in Gruppen aufgeteilt Andere Tipps
Warum schreiben 1 regexp, wenn Sie mehrere schreiben kann, und wendet sie wiederum?
Ich gehe davon aus (?), Die Sie durch line-by-line laufen können. Warum versuchen Sie nicht, Ihr komma versierte regexp, gefolgt von Ihrem Platz versierter regexp usw.? Wenn man übereinstimmt, dann nicht die Mühe, den Rest versuchen, und speichern Sie Ihr Ergebnis und zieht weiter in der nächsten Zeile.
was ist das in 2 Schritten tun:
zuerst ersetzen alle Räume mit ''
dann, wenn die Zahl Formatierung immer gleich ist, können Sie Kommas mit ‚‘
ersetzendanach, sein recht einfach, nicht wahr?