2013-04-12 6 views
-1

Je veux construire RegExp correcte pour les prochaines exigences: La chaîne doit contenir seulement 10 nombres ou 10 nombres de virgule 10 (dans la deuxième variante peut être l'espace avant et après la virgule) ... Et je ne peux pas pour construire ce :(
ma variante est, mais il est incorrect:RegExp pour les nombres

([0-9]{10})|([0-9]{10}\s*\,\s*[0-9]{10}) 

Désolé pour mon anglais =)

UPD: Merci à tous de l'aide!

+0

'^' et '' $ correspondra début et à la fin de la chaîne, respectivement – Aprillion

+0

Wow, vous vous avez beaucoup de mauvaises réponses. Vous pouvez essayer ce constructeur RegEx gratuit: Expresso: http://www.ultrapico.com/ –

Répondre

2

Votre motif est correct, mais présente un petit défaut. La règle à retenir est:

Si votre modèle est OR (|) de deux autres motifs pour lesquels l'un d'eux est sous-modèle d'un autre, mis le plus grand premier motif.

Alors en réorganisant ce que vous avez déjà, nous aurons:

^([0-9]{10}\s*\,\s*[0-9]{10})$|^([0-9]{10})$ 

Ajouté ^ et $ pour inclure la ligne complète correspond uniquement.

+0

'123456789011211121211212, sdafasdf' est le match) – LuckSound

+0

@LuckSound mis à jour –

+0

Est greit! Travail! THX! – LuckSound

1

Essayez ceci:

^\d{10}(?, ?\d{10})?$ 

En utilisant ? fait l'expression précédente en option

+0

123456789012 est de correspondre ... – LuckSound

+0

C'est une bonne chose, non? – Bohemian

+0

Je n'ai besoin que de 10 numéros. Pas plus, pas moins – LuckSound

1

Voici la regex dont vous avez besoin:

\d{10}(?, ?\d{10})? 
+0

123456789012 est de match ... Je n'ai pas besoin de ça ... – LuckSound

+0

Votre question n'a pas donné beaucoup de contexte, mais vous pourriez envelopper le regex ci-dessus dans les parens pour grouper le match si vous essayez de faire correspondre plusieurs fois, ou ajouter^et $ si vous essayez de faire correspondre la chaîne entière. Si vous ne correspondez pas nécessairement à la chaîne entière, vous devez identifier les caractères autorisés après les 10 chiffres. Est-ce un non-chiffre (\ D)? –

1

Vous devez faire correspondre le début et la fin de la chaîne .

/^\d{10}(*, *\d{10})?$/ 

Essayez avec:

/^\d{10}(*, *\d{10})?$/.test(your_string); 
+1

Techniquement, ce n'est pas ce qui a été demandé. Cela permet n'importe quel nombre d'espaces avant/après la virgule et OP a dit un seul espace. De plus, la question ne dit rien sur les caractères de début et de fin, donc cela ne correspondrait pas du tout à son modèle. – Bohemian

+0

1234567890 ne correspond pas = ( – LuckSound

+0

@LuckSound '/^\ d {10} (*, * \ d {10})? $ /. Test ('1234567890');' est vrai – xdazz

1
^\d{10}(?: ?, ?\d{10})?$ 
  • ^...$ = entre le début et la fin de la chaîne
  • \d{10} = 10 chiffres
  • ? = espace en option
  • (?:) = non = groupe de capture
1

Essayez cette

(^\d{10}$|^\d{10} ?, ?\d{10}$)