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
  • 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
  • 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 "$."
  • 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})?$/);

Exemple D'Utilisation De Base

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);
}

Voir: http://jsfiddle.net/znuJf/

-2
répondu Brent 2013-04-26 18:14:44