2010-02-19 5 views
2

Je valide un champ qui ne peut être autre chose que des chiffres, mais peut inclure un espace ou un signe moins.Comment écrire cette regexp?

Ceci sert à valider le champ du numéro de téléphone! Ainsi, ces critères doivent être remplies: (aurait oublié un critère, le cas échéant me rappeler)

1- Atleast 5 numbers 
2- May contain space 
3- Not shorter than 5 characters 
4- Not longer than 20 characters 
5- May contain minus-sign 
6- Not empty 

if (nr.length>4 && nr.length<21 && nr!=''){ 

} 

Comment devrais-je écrire l'expression régulière? Ou l'instruction if?

Merci

Répondre

3

Essayez cette expression régulière:

^(?=(?:\D*\d){5})[\d -]{5,20}$ 

Les tests assertion avant (?=(?:\D*\d){5}) pour les cinq chiffres. Le reste teste la longueur d'au moins 5 et au plus 20 caractères qui ne peuvent être que des chiffres, l'espace ou le trait d'union.

+0

Vous ne manquez pas le signe moins? –

+0

signe moins ??? ... –

1

La condition nr != '' est redondante car les comparaisons de longueur excluent déjà une longueur de zéro.

Ainsi, les comparaisons de longueur hors du chemin, il semble que vous êtes à un simple classe de caractères des chiffres, des espaces et des tirets:

/[\d\s-]{5,20}/ 

Bien sûr, cela permet des choses comme - --- ou un tas d'espaces. Alors peut-être que vous voulez supprimer tout ce qui est pas un chiffre, puis il suffit de cocher pour

/\d{5,20}/ 

qui serait probablement plus simple.

+0

+1 pour me battre dessus. J'étais sur le point de rentrer, moi aussi! :) – Robusto

Questions connexes