it-swarm.com.de

Bestätigung der Währung

Bitte helfen Sie mir, ein JavaScript Validation für das Währungs-/Geldfeld zu schreiben.

Geben Sie bitte alle regulären Ausdrücke an, wenn Sie :)

Für meine Region benötigen Sie keine Währungssymbole wie '$' im Feld.

Nur Dezimalzahlen für die Validierung sind als Sonderzeichen . Zusammen mit Zahlen anzugeben.

21
dev646

Sie könnten einen Regex verwenden:

var regex  = /^\d+(?:\.\d{0,2})$/;
var numStr = "123.20";
if (regex.test(numStr))
    alert("Number is valid");

Wenn Sie die Dezimalstellen nicht so streng einhalten möchten, ist es möglicherweise einfacher, den unären Operator (+) in eine Zahl umzuwandeln, um die Gültigkeit zu prüfen:

var numStr = "123.20";
var numNum = +numStr; // gives 123.20

Wenn die Zahlenzeichenfolge ungültig ist, wird NaN (Not a Number) zurückgegeben, worauf Sie leicht testen können:

var numStr = "ab123c";
var numNum = +numStr;
if (isNaN(numNum))
    alert("numNum is not a number");

Natürlich kann ein Benutzer mehr Dezimalstellen hinzufügen, aber Sie können zusätzliche Funktionen mit number.toFixed(2) abrunden, um auf 2 Dezimalstellen abzurunden. parseFloat ist bei der Eingabe viel weniger streng und rupft die erste aus einer Zeichenfolge herausgefundene Zahl aus, solange die Zeichenfolge mit einer Zahl beginnt, z. parseFloat("123abc") würde 123 ergeben.

35
Andy E

Ich habe meine Antwort aus der akzeptierten Antwort gebildet.

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

^[1-9] Die Nummer muss mit 1-9 beginnen
\d* Die Nummer kann dann beliebig viele Stellen haben
(...)$ schau dir die nächste Gruppe von Ende an (...)$
(...)?(...)? Suchen Sie optional nach zwei Gruppen. Das erste steht für das Komma, das zweite für die Dezimalstelle.
(,\d{3}){1} Suchen Sie nach einem Komma gefolgt von genau drei Ziffern
\.\d{0,2} Suchen Sie nach einer Dezimalstelle, gefolgt von einer, einer oder zwei Ziffern.

Dieser reguläre Ausdruck funktioniert nach diesen Regeln:

  • Gültige Werte sind die Zahlen 0-9, Komma und Dezimalpunkt.
  • Wenn ein Kunde mehr als einen Dezimalpunkt oder mehr als ein Komma eingibt, ist der Wert ungültig und wird nicht akzeptiert.

  • Beispiele für ungültige Eingabewerte

    • 1.2.3
    • 1,2,4
  • Beispiele für gültige Eingabewerte
    • 1.23
    • 1.000
    • 3967.
    • 23
    • 1.2
    • 999.999,99

Ein Beispiel ist hier zu sehen: http://jsfiddle.net/rat141312/Jpxu6/1/

UPDATE

durch Ändern von [1-9] in der Regex zu [0-9] kann auch eine beliebige Zahl überprüft werden, die kleiner als 1 ist. Beispiel: 0,42, 007

27
Sababado
/[1-9]\d*(?:\.\d{0,2})?/

[1-9] - must start with 1 to 9
\d* - any number of other digits
(?: )? - non capturing optional group
\. - a decimal point
\d{0,2} - 0 to 2 digits

funktioniert das für Sie? oder vielleicht parseFloat :

var float = parseFloat( input );
1
meouw

Für mich funktioniert es gut für indische Währung in INR

var regex = /^[1-9]{0,2}(,{0,1})(\d{2},)*(\d{3})*(?:\.\d{0,2})$/;
var a = '1,111.11';
regex.test(a); 
0
Jasbeer Rawal

 let amount = document.querySelector('#amount'), preAmount = amount.value;
        amount.addEventListener('input', function(){
            if(isNaN(Number(amount.value))){
                amount.value = preAmount;
                return;
            }

            let numberAfterDecimal = amount.value.split(".")[1];
            if(numberAfterDecimal && numberAfterDecimal.length > 3){
                amount.value = Number(amount.value).toFixed(3);;
            }
            preAmount = amount.value;
        })
<input type="text" id="amount">

0
user8640104