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.

War es hilfreich?

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{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
  • \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.

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 ‚‘

ersetzen

danach, sein recht einfach, nicht wahr?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top