2017-02-08 7 views
1

Im folgenden Code versuche ich, die Ausgabe zu erhalten, die unterschiedliche Formatierung von Telefonnummern und wenn es entweder gültig ist oder nicht. Ich habe alles außer dem Java Regular Expression-Code in Zeile 11 das String-Muster herausgefunden. ErstellenJava Reguläre Ausdrücke zu Validieren Telefonnummern

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"); 
       } 
      } 
     } 
    } 
+0

Mögliche Duplikat [Eine umfassende regex für Telefonnummer Validierung] (http://stackoverflow.com/questions/123559/a-comprehensive-regex-fuer-handy-nummer-validation) – nullpointer

+2

sind diese 4 das einzig gültige Format? andere als die als ungültig angesehen? Erstellen Sie einfach Regex für jede 4 von ihnen dann – Baby

+0

Beachten Sie, dass das Atom, das eine Ziffer übereinstimmt, '\ d' ist, nicht'/d', und Sie müssen es als '\\ d' schreiben, wenn Sie in einem sind 'String' Literal. –

Antwort

1

Grundsätzlich müssen Sie 3 oder 4 verschiedene Muster nehmen und kombinieren sie mit „|“:

String pattern = "\\d{10}|(?:\\d{3}-){2}\\d{4}|\\(\\d{3}\\)\\d{3}-?\\d{4}"; 
  • \d{10} Streichhölzer 1234567890
  • (?:\d{3}-){2}\d{4} Streichhölzer 123-456-7890
  • \(\d{3}\)\d{3}-?\d{4} Streichhölzer (123)456-7890 oder (123) 4567890
+0

Wie können wir bekommen, wenn die Nummer Ländercode enthält wie: ** + 91-123-456-7890 ** ODER ** + 911-22228888 ** wie Können wir Muster definieren, um diese Art von Telefonnummern herauszufinden? – UltimateDevil

+0

@VikasKumarTiwari Sie scheinen verwirrt zu sein, wie man diese Seite benutzt. Wenn Sie zu 100% sicher sind, dass die Zahlen nur in diesen beiden Mustern angezeigt werden, starten Sie eine neue Frage und geben Sie dies als solche an. Andernfalls sollten Sie die Antworten für [diese allgemeinere Frage] lesen (http://stackoverflow.com/questions/123559/a-comprehensive-regex-for-phone-number-validation) –

+0

Dank @Patrick Parker habe ich getan. Ihre Antwort hat mir sehr geholfen. Ich habe einige Anstrengungen versucht und ich habe es getan – UltimateDevil

0

eine nicht-einfangende Gruppe für drei Ziffern in Klammern oder drei Ziffern (mit einem optionalen Bindestrich). Dann brauchen Sie drei Ziffern (mit einem anderen optionalen Strich), gefolgt von vier Ziffern. Wie, (?:\\(\\d{3}\\)|\\d{3}[-]*)\\d{3}[-]*\\d{4}. Und Sie könnten eine Pattern verwenden. Alle zusammen wie,

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

Dies akzeptiert "123456-7890", was nicht auf der Liste Gültig ist. –

0

Die Regex, die Sie brauchen, ist:

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

Regex Erklärung:

^\\(? - mit einer Option "("

(\\d{3}) kann beginnen - von Gefolgt 3 Ziffern

\\)? - Kann optional haben ")"

[- ]? - Kann ein optionales haben "-" nach den ersten 3 Ziffern oder nach dem optional) Zeichen

(\\d{3}) - gefolgt von 3 Ziffern.

[- ]? - Mai haben ein weiteres optionales „-“ nach Ziffern

(\\d{4})$ - mit vier Ziffern endet