web-dev-qa-db-fra.com

Validation de la monnaie

Aidez-moi à écrire une validation JavaScript pour le champ devise/monnaie.

Veuillez donc fournir les expressions rationnelles si vous avez :)

De plus, pour ma région, n’a pas besoin de symboles monétaires comme "$" dans le champ.

Seuls les nombres décimaux doivent être inclus pour la validation en tant que caractères spéciaux ., Avec des nombres.

21
dev646

Vous pouvez utiliser une expression rationnelle:

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

Si vous ne souhaitez pas être aussi strict avec les décimales, vous trouverez peut-être plus facile d'utiliser l'opérateur unaire (+) pour convertir un nombre en nombre et en vérifier la validité:

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

Si la chaîne numérique est invalide, il retournera NaN (pas un nombre), ce que vous pouvez tester facilement:

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

Bien entendu, cela permettra à un utilisateur d'ajouter plus de décimales, mais vous pouvez supprimer n'importe quel extra en utilisant number.toFixed(2) pour arrondir à 2 décimales. parseFloat est beaucoup moins strict avec l'entrée et va extraire le premier nombre qu'il peut trouver dans une chaîne, tant que cette chaîne commence par un nombre, par exemple. parseFloat("123abc") donnerait 123.

35
Andy E
/[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

cela vous convient-il? ou peut-être parseFloat :

var float = parseFloat( input );
1
meouw

Pour moi sa amende de travail pour la monnaie indienne en 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