2010-01-22 6 views
1

J'essaie de valider une chaîne comme un numéro de téléphone (chiffres et certains caractères spéciaux). J'ai utilisé un extrait de code existant d'ici: http://snippets.dzone.com/posts/show/597 qui semble être correct. Mais à chaque fois, string.match(format) renvoie null, ce qui provoque l'affichage du message d'erreur.Valide comme un numéro de téléphone

var format = /^(\+\d)*\s*(\(\d{3}\)\s*)*\d{3}(-{0,1}|\s{0,1})\d{2}(-{0,1}|\s{0,1})\d{2}$/; 
var string = jQuery(".validate_phone").val(); 
if (string.match(format) != true) { 
    // some error message 
} 

j'ai vérifié déjà, string est rempli que la valeur attendue.

Les valeurs suivantes doivent correspondre:
339-4248
339-42-48
(095) 3394248
(095) 3394248
+7 (095) 3394248
+7 (095) 3394248
+7 (095) 3394248
+7 (095) 3394248

Tout le reste devrait afficher le message d'erreur.

Quel est le problème avec ce code? Merci d'avance!

Mise à jour: Voici un testhttp://labuschin.com/material/phone

+0

Qu'est-ce qu'un échantillon "valeur attendue"? –

+0

Pouvez-vous poster des exemples de numéros que vous voulez ou ne voulez pas faire correspondre? Dès le départ, je vois que les numéros internationaux ne sont pas gérés correctement. –

+0

Quelques exemples de ce qui correspond et ce qui ne serait pas utile. Le Regex est assez complexe. –

Répondre

3

Un ami sur Facebook à m'a aidé avec succès:

var format = /(\+\d)*\s*(\(\d{3}\)\s*)*\d{3}(-{0,1}|\s{0,1})\d{2}(-{0,1}|\s{0,1})\d{2}/; 
var nr= prompt("Phone number", "");  
if (nr.match(format) == null) { 
    alert ("incorrect"); 
} else { 
    alert ("correct"); 
} 

Modifiées si la clause et et a retiré le^au début et à la $ à la fin. Fonctionne ici: http://labuschin.com/material/phone

0

Une regex valide pour ce serait: (\+\d\s*)?(\(\s*\d{3}\s*\)\s*)?\d{3}([- ]?\d{2}){2}.

Toutefois, match() renvoie null sur les non-correspondances et un tableau de valeurs capturées sur les correspondances - il ne retournera jamais true. Vous êtes probablement plus intéressé par search() qui renvoie la position de correspondance ou -1 si l'expression régulière ne correspond pas. E.g .:

var format = /^(\+\d\s*)?(\(\s*\d{3}\s*\)\s*)?\d{3}([- ]?\d{2}){2}$/; 
var string = jQuery(".validate_phone").val(); 
if (string.search(format) == -1) { 
    // some error message 
} 
+0

Désolé, ne fonctionne pas dans mon test. Tout reste "incorrect" –

0

Peut-être ... vous ne devriez pas utiliser "chaîne" comme nom de var.

var format = /^(\+\d)*\s*(\(\d{3}\)\s*)*\d{3}(-{0,1}|\s{0,1})\d{2}(-{0,1}|\s{0,1})\d{2}$/; 
var nr= prompt("Phone number", ""); 
if (!nr.match(format)) { 
alert ("incorrect"); 
} else { 
alert ("correct"); 
} 

fonctionne pour moi.

+0

je l'ai essayé ici: http: // labuschin.com/matériel/téléphone malheureusement, il ne fonctionne pas non plus :( –

+0

Votre version en ligne fonctionne pour moi (FF, Chrome, Safari, l'enfer - même dans IE) Testé "7 (095) 3394248" et Somer autres valeurs. ... Cependant, j'ai eu une erreur de validation car j'ai essayé de copier et coller un nombre car il y avait un espace supplémentaire à la fin. est assez long (7 caractères min) – Orange

Questions connexes