字符串上的正则表达式

时间:2013-05-02 15:10:21

标签: java regex

我有一个像下面的字符串

String phone = (123) 456-7890

现在我希望我的程序验证我的输入是否与字符串'phone'

相同

我做了以下

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.compile(“(\ d +)”); 匹配匹配= pattern.matcher(电话);

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

5 个答案:

答案 0 :(得分:4)

String#matches检查字符串是否与模式匹配:

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

模式是正则表达式。因此,我必须逃避圆括号,因为它们在正则表达式中具有特殊含义(它们表示捕获组)。

contains()仅检查字符串是否包含传递给它的子字符串。

答案 1 :(得分:1)

我不会深入研究正则表达式的语法,但是你的正则表达式确实存在一些问题。

"([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-9][0-9][0-9]\\) [0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]"

答案 2 :(得分: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

答案 3 :(得分:0)

看来你的问题是你没有逃脱括号,所以你的正则表达式失败了。试试这个:

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

答案 4 :(得分: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