2013-05-02 222 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