2016-08-03 17 views
1
if((phone.length() > 10 && 
        ((phone.contains("+1" + "((\\\\d{3}-)){1,2}\\\\d{4}")) 
        || (phone.contains("+966" + "d{9}")))) 
        || ((phone.length() == 10) && 
        !(phone.contains("(") && !(phone.contains(")") && 
        !(phone.contains("-")))))) //phone doesnt contain special characters if its a saudi no. 
       { 
        .... 
       } 
       else { 
        .... 
       } 

Hallo alle :) Ich versuche, einen Code zu erstellen, die die folgenden Formate von Telefonnummern und nichts bestätigt anderes:Regex verwenden, um eine Telefonnummer zu bestätigen?

  1. + 9665xxxxxxxx
  2. 05xxxxxxxx
  3. +1 (xxx) xxx -xxxx
  4. + 1xxxxxxxxxx
  5. xxx-xxx-xxxx

Ich habe versucht, dies in dem obigen Code zu tun, wo die Telefonnummer als String "Telefon" dargestellt wird. Aber ich denke, ich habe es falsch gemacht, vor allem die Regex. Kann mir jemand sagen, ob es einen einfacheren Weg dafür gibt? Oder eine vereinfachte Version des Codes? Wäre es einfacher, wenn ich stattdessen eine Reihe von if() - Anweisungen verwende? Es tut mir leid, dass ich neu in Java bin, also bin ich mir sicher, dass ich etwas falsch gemacht habe.

+0

Wenn Sie validate * * sagen, meinen Sie, dass die Zahl einfach einer von denen muss fünf übereinstimmen Muster gelten als gültig, oder muss es eine tatsächliche, echte Telefonnummer darstellen? Einer ist härter als der andere – JonK

+0

@JonK was meinst du mit dem zweiten Teil? weil ich nur meinte, es musste in das Muster passen –

Antwort

1

So etwas sollte es tun:

Pattern pattern = Pattern.compile(
    "\\+9665\\d{8}|05\\d{8}|\\+1\\(\\d{3}\\)\\d{3}-\\d{4}|\\+1\\d{10}|\\d{3}-\\d{3}-\\d{4}" 
); 
Matcher matcher = pattern.matcher("+966512345678"); 
System.out.println(matcher.matches()); 

Ausgang:

true 
+0

vielen Dank! Kann ich bitte wissen, wie du das gelernt hast? –

+0

Das Javadoc ist ein guter Start https://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html –