2009-10-14 8 views
1

Ceci est l'expression régulière que j'utilise pour correspondre les numéros de téléphone comme:Expression régulière pour correspondre à des numéros de téléphone avec les codes de pays

00 00 00 00 00 
00 00 0 00 00 00 00 
+00 0 00 00 00 00 

(\d{2}\s+\d{2}\s+\d{2}\s+\d{2}\s+\d{2})\s+(\d{2}\s+\d{2}\s+\d\s+\d{2}\s+\d{2}\s+\d{2}\s+\d{2})\s+(+\d{2}\s+\d\s+\d{2}\s+\d{2}\s+\d{2}\s+\d{2}) 

J'ai essayé de l'inclure dans mes javascript mais il ne fonctionne pas vraiment

if(document.maj_profil.phone.value.search(/^\(\d{2}\s+\d{2}\s+\d{2}\s+\d{2}\s+\d{2}\)\s+\(\d{2}\s+\d{2}\s+\d\s+\d{2}\s+\d{2}\s+\d{2}\s+\d{2}\)\s+\(+\d{2}\s+\d\s+\d{2}\s+\d{2}\s+\d{2}\s+\d{2}\)/) == -1) 
    { 
    displayDialog('wrong phone format') 
     } 
+1

Certes, ces \\\ (\\\) 's ont tort? Dans vos exemples, il n'y a pas de parenthèses autour des numéros de téléphone. –

+0

Votre utilisateur doit-il entrer un numéro de téléphone ou doit-il entrer les trois numéros? – jantimon

+0

seulement un, mais il y a 3 format possible – Roch

Répondre

3
  1. Si vous avez vos formats alternatifs énumérés comme:

    (...)\s+(...)\s+(...) 
    

    changement qui à utiliser le | (OR) opérateur:

    (...)|(...)|(...) 
    
  2. Ne pas échapper les parenthèses . \( et devrait être simplement ( et ).

  3. Dans votre troisième groupe le + au début doivent être protégés avec une barre oblique inverse:

    (\+\d{2}\s+\d\s+\d{2}\s+\d{2}\s+\d{2}\s+\d{2}) 
    
+0

merci beaucoup cela fonctionne parfaitement – Roch

1

Essayez ceci:

\d\d(\s+\d\d){4}|(\d\d\s+\d\d\s+\d|\+\s+\d)\d\d(\s+\d\d){3} 

qui signifie:

\d\d(\s+\d\d){4} // 00 00 00 00 00 

|     // OR 

(     // (
    \d\d\s+\d\d\s+\d // 00 00 0 
    |     // OR 
    \+\s+\d   // + 0 
)     //) 
\d\d(\s+\d\d){3} // 00 00 00 00 
0

Dans le javascript, vous avez échappé à tous les supports. Voulez-vous qu'ils se comportent comme des groupes de capture, ou voulez-vous faire correspondre des parenthèses réelles dans la chaîne?

Utilisez également le test au lieu de la recherche. test renvoie vrai ou faux, pas un nombre.

0

L'échappement de la parenthèse les transforme en littéraux. Essayez sans les évasions:

/^(\d{2}\s+\d{2}\s+\d{2}\s+\d{2}\s+\d{2})\s+(\d{2}\s+\d{2}\s+\d\s+\d{2}\s+\d{2}\s+\d{2}\s+\d{2})\s+(\d{2}\s+\d\s+\d{2}\s+\d{2}\s+\d{2}\s+\d{2})/ 
0

Essayez ceci:

var re = /^\+?(\d{1,2} ?)+$/g 
var phone = "00 00 00 00 00"; //"00 00 00 00 00x"; 
if(!re.test(phone)) 
    alert("wrong phone pattern"); 
Questions connexes