2010-07-29 7 views
1

j'ai besoin d'aide pour écrire un regex pour un modèle de numéro de téléphone qui permet aux formats suivants pour un numéro de téléphoneNuméro de téléphone regex pour plusieurs modèles en Java


 
1)###-###-#### 
or 
2)#-###-###-#### 
or 
3)###-#### 
or 
4)########## 
or 
5)####### 

Je suis bien conscient, que vous sont en mesure de trouver des modèles regex sur internet, mais je n'ai pas été en mesure d'en trouver un qui passera pour tous ces modèles. J'utilise Java

+0

Quel est le contexte de votre tentative de validation? Je demande parce que c'est généralement mieux comme un champ de forme libre une fois que vous commencez à recevoir des réponses ".. #### x12345" qui sont valides et imprévisibles. Vous ennuierez également les utilisateurs qui ont l'habitude de taper +1.987.555.1212. Voir aussi http://en.wikipedia.org/wiki/E.164 – msw

+0

Avez-vous déjà regardé cela? http://stackoverflow.com/questions/123559/a-comprehensive-regex-for-phone-number-validation – hallidave

Répondre

4

Vous pouvez utiliser le | (ou) opérateur et modèles multiples.

Par exemple: (\d{7})|(\d{10)| ...

+0

ouais je suis conscient de cette utilisation, mais je n'ai pas tous les modèles – TheJediCowboy

+7

attends ... si tu ne Ne sais pas ce que tu cherches alors comment sauras-tu quand tu le trouveras? ~ plato – sholsapp

2

essayer ^(\+\d)*\s*(\(\d{3}\)\s*)*\d{3}(-{0,1}|\s{0,1})\d{2}(-{0,1}|\s{0,1})\d{2}$

Here est un évaluateur d'expression régulière en ligne, vous pouvez tester vos modèles contre cette regex et/ou tout autre.

1

Essayez cette expression régulière:

@"^(((\d-)?\d{3}-)?(\d{3}-\d{4})|\d{7}|\d{10})$"

Cela couvre les cinq scénarios que vous avez décrits; Par ailleurs, si vous pouvez accepter les scénarios suivants:

6)###-####### 
or 
7)#-###-####### 
or 
8)#-########## 

Ensuite, cette variante plus courte fonctionnera aussi:

@"^(((\d-?)?\d{3}-?)?(\d{3}-?\d{4}))$"

1

Essayez cette

^\ d - (\ d? {3})? -? \ D {3} -? \ D {4} $

1

Ceci permet les extensions, les formats internationaux UK, et les contrôles min longueur 7 caractères

^(?=.{7,32}$)(\(?\+?[0-9]*\)?)?[0-9_\- \(\)]*((\s?x\s?|ext\s?|extension\s?)\d{1,5}){0,1}$ 
2
public int Phone(String num) 
{ 
    try 
    { 
    String expression = "^(?=.{7,32}$)(\\(?\\+?[0-9]*\\)?)?[0-9_\\- \\(\\)]*((\\s?x\\s?|ext\\s?|extension\\s?)\\d{1,5}){0,1}$"; 
    CharSequence inputStr = num; 
    Pattern pattern = Pattern.compile(expression); 
    Matcher matcher = pattern.matcher(inputStr); 
    int x=0,y=0; 
    char[] value=num.toCharArray(); 
    for(int i=0;i<value.length;i++) 
    { 
     if(value[i]=='(') 
      x++; 
     if(value[i]==')'&&((value[i+1]>=48&&value[i+1]<=57)||value[i+1]=='-')) 
      y++; 
    } 
    if(matcher.matches()&&x==y) 
     return 1; //valid number 
    else 
     return 0; //invalid number 
    } 
    catch(Exception ex){return 0;} 
} 



} 
+0

Vous devez inclure des valeurs de test afin que nous sachions exactement à quoi cela va correspondre. –

1

Ne pas demander à l'utilisateur d'entrer le numéro dans un format particulier.

Laissez-les entrer comme ils le souhaitent.

Dénudez n'importe quel code de pays et stockez-le pour une utilisation ultérieure, de même que toutes les données de numéro de poste si présentes.

Supprimez les espaces et la ponctuation.

Vérifiez que les chiffres restants sont potentiellement valides en regardant les chiffres principaux et la longueur du nombre.

Enregistrez le numéro dans votre base de données au format international avec le code du pays, sans espace ni ponctuation.

Afficher le numéro à l'utilisateur dans un format normalisé (format national ou international avec code du pays) avec espaces et ponctuation ajoutés pour plus de lisibilité.

2

Cette expression rationnelle correspond à tous les numéros locaux et numéros internationaux.

String reg= "([\\+(]?(\\d){2,}[)]?[- \\.]?(\\d){2,}[- \\.]?(\\d){2,}[- \\.]?(\\d){2,}[- \\.]?(\\d){2,})|([\\+(]?(\\d){2,}[)]?[- \\.]?(\\d){2,}[- \\.]?(\\d){2,}[- \\.]?(\\d){2,})|([\\+(]?(\\d){2,}[)]?[- \\.]?(\\d){2,}[- \\.]?(\\d){2,})"; 

1 ### - ### - ####
2 #### - ### - ####
########## 3
4 + ### ## - ### - ####
5 ### ### ####
6 ### ### ####

.. 7 (###) ### ####

Tous les formats ci-dessus fonctionneraient.

+0

Ne fonctionne pas pour les numéros de téléphone américains valides, par ex. 1-888-944-9400 –

Questions connexes