2010-10-25 4 views
1

Vous cherchez un moyen simple (Function/RegEx) pour valider un nombre avec des milliers groupés.Validez un nombre avec des milliers décimaux à la hundreth

Nombres Exemple:

.00 - 999.00 should validate 
1,000.00 should validate 
100,000.00 etc... should validate 
100,000,000,000,000.00 should validate 

Maintenant, je l'ai vu number_format(), mais le nombre formats non Valide.

Je voulais utiliser un RegEx mais j'ai perdu sur la façon de le faire.

preg_match(/^[\d]\,?\.[\d]{2}$/, $number); 

mais cela ne fonctionne pas.

J'ai aussi regardé le money_format() mais encore une fois c'est le format et non la validation.

+0

Quelles choses ne devraient pas valider, 1000? 1,000,000? – BenWells

+0

L'utilisateur doit-il soumettre ces numéros? – MatTheCat

+0

1,000,000 ne devrait PAS valider car la décimale montre le nombre de millièmes –

Répondre

1
^(?:\d{1,3}(?:,\d{3})*)?\.\d{2}$ 
+0

Que fait le colon dans ce modèle? – BenWells

+0

Merci, juste une question. Je connais le ? rend le caractère optionnel mais qu'est-ce que cela fait à l'expression: –

+0

@Ben, @Phill: Voulez-vous dire les parties '?:'? Ils signifient simplement que le groupe entre parenthèses est non-capturant. L'utilisation de groupes non-capturants suppose une amélioration (très faible) des performances lorsque vous n'avez pas réellement besoin de capturer le texte. http://www.regular-expressions.info/brackets.html – LukeH

1

Situé juste à côté du haut de ma tête:

preg_match('%^[\d,]*\.\d{2}$%', $number); 

Cela correspondra tous les chiffres que vous avez mentionnés (en fait: « » chaque chaîne qui commence par une combinaison de chiffres et de virgules et se termine et aux chiffres).

Encore une fois, ceci n'est pas testé mais devrait fonctionner.

+1

Cela permettra 1000.00 qui devrait être dans ce format: 1.000.00 –

+0

Oh, vous avez raison. Ma faute. – Turbotoast

+0

+1 pour l'effort –