it-swarm.com.de

Regex-Währungsvalidierung

Ich benötige Hilfe bei der Währungsumrechnung in der jQuery-Funktion.

  • Optional kann das "$" - Zeichen am Anfang nur einmal verwendet werden.
  • Es erlaubt ein Komma als digitales Gruppentrennzeichen, jedoch nicht am Anfang oder am Ende.
  • Es sind nur 2 Nachkommastellen zulässig.
  • Es lässt nur einen Dezimalpunkt zu und nicht am Anfang oder am Ende.

gültig:

$1,530,602.24
1,530,602.24

ngültig:

$1,666.24$
,1,666,88,
1.6.66,6
.1555.

Ich habe es versucht /^\$?[0-9][0-9,]*[0-9]\.?[0-9]{0,2}$/i; es funktioniert gut, außer es passt zu 1,6,999.

29
user2205924

Der RegEx

// Requires a decimal and commas
^\$?(([1-9]\d{0,2}(,\d{3})*)|0)?\.\d{1,2}$

// Allows a decimal, requires commas
(?=.*\d)^\$?(([1-9]\d{0,2}(,\d{3})*)|0)?(\.\d{1,2})?$

// Decimal and commas optional
(?=.*?\d)^\$?(([1-9]\d{0,2}(,\d{3})*)|\d+)?(\.\d{1,2})?$

// Decimals required, commas optional
^\$?(([1-9]\d{0,2}(,\d{3})*)|0)?\.\d{1,2}$

// *Requires/allows X here also implies "used correctly"

Die RegEx-Aufschlüsselung

  • Wenn die optionalen Teile zu liberal sind, müssen wir nach vorne schauen und sicherstellen, dass es eine Nummer gibt: (?=.*\d)
  • Kann mit einem Dollarzeichen beginnen oder auch nicht (ich nehme an, dass Negative ungültig sind): ^\$?
    • Folgen Sie dem mit -?, Um negative Zahlen zuzulassen
  • Beginnt mit 1-3 Zahlen: [1-9]\d{0,2}
    • Könnte fast (\d{1,3}) Sein, aber das würde "0,123" erlauben
    • Eine Ausnahme, die bei "$ 0.50" oder "0.50" mit 0 beginnen kann: |0
    • Diese regulären Ausdrücke setzen voraus, dass mehrere führende Nullen ungültig sind
  • Beliebige Anzahl dreistelliger Zahlen, durch Komma getrennt: (,\d{3})*
    • Entfernen Sie ? Vor \., Wenn Sie Zahlen, die mit "$" beginnen, nicht zulassen möchten.
  • Erfordert oder erlaubt Dezimalstellen (ein- oder zweistellig): \.\d{1,2} Bzw. (\.\d{1,2})?
  • Beenden Sie mit $ (Ohne Fluchtzeichen), um sicherzustellen, dass nach einer gültigen Zahl nichts mehr steht (z. B. $ 1,000.00b).

Um den regulären Ausdruck zu verwenden, verwenden Sie die match -Methode der Zeichenfolge und schließen Sie den regulären Ausdruck zwischen zwei Schrägstrichen ein.

// The return will either be your match or null if not found
yourNumber.match(/(?=.)^\$?(([1-9][0-9]{0,2}(,[0-9]{3})*)|0)?(\.[0-9]{1,2})?$/);

// For just a true/false response
!!yourNumber.match(/(?=.)^\$?(([1-9][0-9]{0,2}(,[0-9]{3})*)|0)?(\.[0-9]{1,2})?$/);

Beispiel für grundlegende Verwendung

Demo mit Testfällen

var tests = [
    "$1,530,602.24", "1,530,602.24", "$1,666.24$", ",1,666,88,", "1.6.66,6", ".1555."
];

var regex = /(?=.*\d)^\$?(([1-9]\d{0,2}(,\d{3})*)|0)?(\.\d{1,2})?$/;

for (i = 0; i < tests.length; i++) { 
  console.log(tests[i] + ' // ' + regex.test(tests[i]));
  document.write(tests[i] + ' // ' + regex.test(tests[i]) + '<br/>');
}
111
Gary