2013-05-02 228 views
0

我有一個像下面一個字符串正則表達式

String phone = (123) 456-7890 

現在我想我的計劃,以驗證我的輸入是相同的模式字符串「電話」

我做了以下的String

if(phone.contains("([0-9][0-9][0-9]) [0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]")) { 

    //display pass 
} 
else { 

    //display fail 
} 

它沒有工作。我也嘗試過其他組合。沒有工作。

問題: 1.如何在不使用上述「模式」的情況下實現此目的? 2.如何用圖案做到這一點。我試着用下面的圖案

Pattern pattern = Pattern.compile(「(\ d +)」); Matcher match = pattern.matcher(phone);

if (match.find()) { 
    //Displaypass 
} 
+2

你應該逃避'('和')'。它們在正則表達式中有特殊的含義。 – Maroun 2013-05-02 15:13:00

回答

4

String#matches檢查是否有字符串模式相匹配:

if (phone.matches("\\(\\d{3}\\) \\d{3}-\\d{4}")) { 
    //Displaypass 
} 

的圖案是正則表達式。因此,我不得不擺脫圓括號,因爲它們在正則表達式中有特殊含義(它們表示捕獲組)。

只檢查一個字符串是否包含傳遞給它的子字符串。

+0

+1。你可能想說一些關於在正則表達式中具有特殊含義的字符逃逸。 – Maroun 2013-05-02 15:14:13

+0

工作完美..謝謝@jlordo – user1669488 2013-05-02 15:27:52

1

我不會深入探究正則表達式的語法,但肯定會有一些東西與您的正則表達式。

"([0-9][0-9][0-9]) [0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]" 

它containes ()和那些有特殊含義。逃離他們

"\([0-9][0-9][0-9]\) [0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]" 

,你還必須逃避你\爲最終

"\\([0-9][0-9][0-9]\\) [0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]" 
+0

謝謝..我今天學到了新東西:) – user1669488 2013-05-02 15:28:49

0

你可以這樣寫:

Pattern pattern = Pattern.compile("\\(\\d{3}\\) \\d{3}-\\d{4}"); 
Matcher matcher = pattern.matcher(sPhoneNumber); 

if (matcher.matches()) { 
    System.out.println("Phone Number Valid"); 
} 

欲瞭解更多信息,您可以訪問this article

0

看來你的問題是你沒有逃避括號,所以你的正則表達式失敗。試試這個:

\([0-9][0-9][0-9]\) [0-9][0-9][0-9]-[0-9][0-9][0-9][0-9] 
0

這工作

String PHONE_REGEX = "[(]\\b[0-9]{3}\\b[)][ ]\\b[0-9]{3}\\b[-]\\b[0-9]{4}\\b"; 
String phone1 = "(1234) 891-6762"; 
Boolean b = phone1.matches(PHONE_REGEX); 
System.out.println("is e-mail: " + phone1 + " :Valid = " + b); 
String phone2 = "(143) 456-7890"; 
b = phone2.matches(PHONE_REGEX); 
System.out.println("is e-mail: " + phone2 + " :Valid = " + b); 

輸出:

is phone: (1234) 891-6762 :Valid = false 
is phone: (143) 456-7890 :Valid = true