我有一个像下面的字符串
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
}
答案 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