0

我有一个像下面这样的字符串

String phone = (123) 456-7890

现在我希望我的程序验证我的输入是否与字符串“电话”的模式相同

我做了以下

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(phone);

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

5 回答 5

4

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

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

该模式是一个正则表达式。因此我不得不避开圆括号,因为它们在正则表达式中具有特殊含义(它们表示捕获组)。

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

于 2013-05-02T15:12:46.947 回答
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]"
于 2013-05-02T15:13:16.470 回答
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");
}

欲了解更多信息,您可以访问这篇文章

于 2013-05-02T15:14:32.753 回答
0

看来您的问题是您没有转义括号,因此您的正则表达式失败了。尝试这个:

\([0-9][0-9][0-9]\) [0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]
于 2013-05-02T15:15:35.373 回答
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
于 2013-05-02T15:25:06.543 回答