Validation des devises Regex
J'ai besoin d'aide pour regex de devise dans la fonction jQuery.
- il n'autorise le signe $ qu'une seule fois au début.
- il permet la virgule comme séparateur de groupe numérique, mais pas au début ou à la fin.
- il permet seulement 2 chiffres arrondis après le point décimal.
- il ne permet qu'un point décimal et pas au début ni à la fin.
Valide:
,530,602.24
1,530,602.24
non Valide:
,666.24$
,1,666,88,
1.6.66,6
.1555.
j'ai essayé /^$?[0-9][0-9,]*[0-9].?[0-9]{0,2}$/i
; il fonctionne très bien sauf qu'il correspond à 1,6,999
.
23
demandé sur
Gary
2013-04-26 21:54:27
2 réponses
The 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"
La RegEx Ventilation
- lorsque les parties optionnelles sont trop libérales, nous devons regarder à l'avance et garantir qu'il y a un nombre:
(?=.*\d)
- Peut ou peut ne pas démarrer avec un signe dollar (je suppose négatifs ne sont pas valides):
^$?
- Suivre
-?
pour permettre des nombres négatifs
- Suivre
- Commence par 1-3 nombres:
[1-9]\d{0,2}
- presque
(\d{1,3})
, mais que permettrait de "0,123" - Une exception, peut commencer avec 0 dans le cas de "$0.50" ou "0.50":
|0
- ces regexes supposent que plusieurs 0 de tête sont invalides
- presque
- n'Importe quel nombre de trois chiffres séparés par des virgules:
(,\d{3})*
- Supprimer
?
avant\.
si vous voulez interdire les numéros commençant par "$."
- Supprimer
- permet ou l'Exige décimal (un ou deux chiffres):
\.\d{1,2}
ou(\.\d{1,2})?
respectivement $
(sans escapade) pour s'assurer qu'il n'y a rien après un nombre valide (comme 1000$.00 b)
pour utiliser le regex, utilisez la chaîne match
méthode et de l'enrober les regex entre deux barres obliques.
// 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})?$/);
Démo avec des Cas de Test
var tests = [
",530,602.24", "1,530,602.24", ",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/>');
}
104
répondu
Gary
2018-04-28 01:40:27
Voici l'expression régulière qui devrait réaliser ceci pour vous.
le début doit être numérique ou $ sign. Il peut y avoir n'importe quel nombre de chiffres avec des virgules, Mais il doit commencer et finir avec un chiffre. Il peut éventuellement être un point décimal ayant deux chiffres après la fin de la ligne.
var your_input = ",000,000.00";
var valid_dollar_amt_regex = /^$?[0-9][0-9,]*[0-9]\.?[0-9]{0,2}$/i;
if(valid_dollar_amt_regex.test(your_input))
alert("Valid!");
ou utilisez cette fonction
function validate_money(i) {
var valid_dollar_amt_regex = /^$?[0-9][0-9,]*[0-9]\.?[0-9]{0,2}$/i;
return valid_dollar_amt_regex.test(i);
}
-2
répondu
Brent
2013-04-26 18:14:44