web-dev-qa-db-fra.com

Expressions régulières Java pour valider des numéros de téléphone

Dans le code suivant, j'essaie de faire en sorte que le résultat soit le formatage différent des numéros de téléphone et qu'il soit valide ou non. J'ai tout compris, sauf le code Java Regular Expression de la ligne 11 du modèle de chaîne.

 import Java.util.regex.*;

  public class MatchPhoneNumbers {
   public static void main(String[] args) {           
     String[] testStrings = {               
               /* Following are valid phone number examples */             
              "(123)4567890", "1234567890", "123-456-7890", "(123)456-7890",
              /* Following are invalid phone numbers */ 
              "(1234567890)","123)4567890", "12345678901", "(1)234567890",
              "(123)-4567890", "1", "12-3456-7890", "123-4567", "Hello world"};

             // TODO: Modify the following line. Use your regular expression here
              String pattern = "^/d(?:-/d{3}){3}/d$";    
             // current pattern recognizes any string of digits           
             // Apply regular expression to each test string           
             for(String inputString : testStrings) {
                System.out.print(inputString + ": "); 
                if (inputString.matches(pattern)) {     
                    System.out.println("Valid"); 
                } else {     
                    System.out.println("Invalid"); 
                }
             }
      }
  }
6
Ducky

Fondamentalement, vous devez prendre 3 ou 4 modèles différents et les combiner avec "|":

String pattern = "\\d{10}|(?:\\d{3}-){2}\\d{4}|\\(\\d{3}\\)\\d{3}-?\\d{4}";
  • \d{10} correspond à 1234567890
  • (?:\d{3}-){2}\d{4} correspond à 123-456-7890
  • \(\d{3}\)\d{3}-?\d{4} correspond (123)456-7890 ou (123) 4567890
7
Patrick Parker

La regex dont vous avez besoin est:

String regEx = "^\\(?(\\d{3})\\)?[- ]?(\\d{3})[- ]?(\\d{4})$";

Explication regex:

^\\(? - Peut commencer par une option "("

(\\d{3}) - suivi de 3 chiffres

\\)? - Peut avoir un ")" optionnel

[- ]? - Peut avoir un "-" optionnel après les 3 premiers chiffres ou après

(\\d{3}) - suivi de 3 chiffres.

[- ]? - Peut avoir un autre "-" facultatif après les chiffres

(\\d{4})$ - se termine par quatre chiffres

2
ankit MISHRA

numéro de téléphone international regex

String str=  "^\\s?((\\+[1-9]{1,4}[ \\-]*)|(\\([0-9]{2,3}\\)[ \\-]*)|([0-9]{2,4})[ \\-]*)*?[0-9]{3,4}?[ \\-]*[0-9]{3,4}?\\s?";


 if (Pattern.compile(str).matcher(" +33 - 123 456 789 ").matches()) {
        System.out.println("yes");
    } else {
        System.out.println("no");
    } 
1
Anurag Gupta

Créez un groupe sans capture de trois chiffres entre parenthèses ou trois chiffres (avec un tiret facultatif). Ensuite, vous avez besoin de trois chiffres (avec un autre tiret facultatif), suivis de quatre chiffres. Comme, (?:\\(\\d{3}\\)|\\d{3}[-]*)\\d{3}[-]*\\d{4}. Et vous pourriez utiliser un Pattern. Tous ensemble aiment,

String[] testStrings = {
        /* Following are valid phone number examples */         
        "(123)4567890", "1234567890", "123-456-7890", "(123)456-7890",
        /* Following are invalid phone numbers */
        "(1234567890)","123)4567890", "12345678901", "(1)234567890",
        "(123)-4567890", "1", "12-3456-7890", "123-4567", "Hello world"};

Pattern p = Pattern.compile("(?:\\(\\d{3}\\)|\\d{3}[-]*)\\d{3}[-]*\\d{4}");
for (String str : testStrings) {
    if (p.matcher(str).matches()) {
        System.out.printf("%s is valid%n", str);
    } else {
        System.out.printf("%s is not valid%n", str);    
    }
}
0
Elliott Frisch