2010-02-09 5 views
19

S'il vous plaît aidez-moi à écrire un JavaScript Validation pour le champ monnaie/argent.Validation de la devise

Alors s'il vous plaît fournir des expressions régulières si u ont :)

Aussi, pour ma région, ne pas besoin de symboles monétaires comme « $ » dans le domaine.

Seules les décimales doivent être incluses pour la validation en tant que caractères spéciaux., Ainsi que les chiffres.

+0

est la partie après la virgule en option? est '103.5' valide, ou devrait-il être' 103.50'? – Amarghosh

+0

partie après décimale est facultative. – dev646

Répondre

32

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 cherchez pas à être aussi stricte avec les décimales vous pourriez trouver plus facile d'utiliser le unaire (+) opérateur de jeter à un certain nombre de vérifier sa validité:

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

Si la chaîne de numéro est incorrect, il retournera NaN (Non un numéro), quelque chose que vous pouvez tester facilement:

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

Il sera, bien sûr, permettre à un utilisateur d'ajouter plus de décimales mais vous pouvez couper tout congé supplémentaire en utilisant number.toFixed(2) pour arrondir à 2 décimales. parseFloat est beaucoup moins strict avec l'entrée et va chercher le premier nombre qu'il peut trouver sur une chaîne, tant que cette chaîne commence par un nombre, par exemple. parseFloat("123abc") donnerait 123.

+1

wow ... se sentir mieux maintenant ... c'était bon ... Merci! – dev646

+3

regex utilisée pour tester la validité de la chaîne n'accepte pas les virgules. Utilisez plutôt/^[1-9]\d*(((,\d{3}){1})? – Redtopia

1
/[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 fonctionne pour vous? ou peut-être parseFloat:

var float = parseFloat(input); 
+2

Je ne pense pas que 'parseFloat' ou' parseInt' sont parfaits pour la validation, ils vont analyser les chaînes comme "123abc" comme "123". De plus, votre regex teste true sur la chaîne suivante: '" a01.9bc "', vous devez ajouter '^' et '$' pour correspondre respectivement au début et à la fin de la chaîne. En fait, même alors une chaîne comme "0.91" ne fonctionnera pas. –

+0

Oui, vous avez raison, Andy E a fourni une meilleure réponse – meouw

25

J'ai construit ma réponse à partir de la réponse acceptée.

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

^[1-9] Le numéro doit commencer par 1-9
\d* Le nombre peut alors avoir un nombre quelconque de tous les chiffres
(...)$ regard sur le groupe suivant de la fin (...)$
(...)?(...)? Rechercher deux groupes facultativement. Le premier est pour la virgule, le second est pour la virgule.
(,\d{3}){1} Rechercher une occurrence d'une virgule suivie de trois chiffres exactement
\.\d{0,2} Recherchez un nombre décimal suivi de zéro, un ou deux chiffres.

Ce regex fonctionne hors de ces règles:

  • Les valeurs valides sont des nombres 0-9, virgule et le point décimal.
  • Si un client entre plus d'un point décimal ou plus d'une virgule, la valeur est invalide et ne sera pas acceptée.

  • exemples de valeurs d'entrée invalide

    • 1.2.3
    • 1,2,4
  • Des exemples d'entrée valide les valeurs
    • 1,23
    • 1.000
    • 3967.
    • 1,2
    • 999,999.99

Un exemple peut être vu ici: http://jsfiddle.net/rat141312/Jpxu6/1/

MISE À JOUR

en changeant la [1-9] dans le regex à [0-9] tout nombre moins de 1 peut également être validé. Exemple: 0,42, 007

+0

Utile! Combiné avec la réponse acceptée, cela s'est avéré être une bonne solution à un problème que j'avais. –

+2

... sauf qu'il ne permet pas les nombres inférieurs à 1.00. –

+2

Andy, vu ton commentaire en retard. Vous avez raison :(aucune valeur inférieure à 1 autorisée En changeant le 1-9 en 0-9 cela fonctionnera – Sababado

0

Pour moi son beau travail de la monnaie indienne INR

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