我要检查的电话号码有两种格式:
(555) 555-5555
和555-555-5555
但是,我的if条件在下面的代码中一直失败。我正在尝试检查str.charAt(0)
是(
还是数字
public static boolean isPhoneNumber(String str) {
if (str.contains("-")) {
for (int i = 0; i < str.length(); i++) {
if ((i == 0 && str.charAt(0) != '(')
|| (i == 0 && Character.isDigit(str.charAt(0)) == false)) {
System.out.println(Character.isDigit(str.charAt(0)));
return false;
}
if (i == 4 && str.charAt(4) != ')' || i == 4 && !(Character.isDigit(str.charAt(4)))) {
System.out.println("here2");
return false;
}
if (i == 3 && str.charAt(3) != '-'
|| i == 3 && (Character.isDigit(str.charAt(3)) == false)) {
System.out.println(str.charAt(3));
return false;
}
if (i == 5 && str.charAt(5) != ' ' || i == 5 && !(Character.isDigit(str.charAt(5)))) {
System.out.println("here4");
return false;
}
if (i == 7 && str.charAt(i) != '-' || i == 7 && !(Character.isDigit(str.charAt(i)))) {
System.out.println("here5");
return false;
}
if (i == 9 && str.charAt(9) != '-' || i == 9 && !(Character.isDigit(str.charAt(9)))) {
System.out.println("here6");
return false;
}
if (i != 0 && i != 3 && i != 5 && i != 7 && i != 9 && !(Character.isDigit(str.charAt(i)))) {
System.out.println("here7");
return false;
}
}
return true;
} else {
return false;
}
}
这里可能工作的通用正则表达式模式是:
^(?:(d{3})s*|d{3}-)d{3}-d{4}$
以下是对上述正则表达式的解释:
^ from the start of the input
(?:
(d{3}) match (xxx)
s* followed by optional whitespace
| OR
d{3}- xxx-
)
d{3}-d{4} match xxx-xxxx
$ end of the input
演示
这将涵盖你上面给出的两个版本的电话号码。在Java中,我们可以在这里使用String#matches
:
String phone1 = "(555) 555-5555";
String phone2 = "555-555-5555";
if (phone1.matches("(?:\(\d{3}\)\s*|\d{3}-)\d{3}-\d{4}")) {
System.out.println(phone1 + " is in a valid format");
}
if (phone2.matches("(?:\(\d{3}\)\s*|\d{3}-)\d{3}-\d{4}")) {
System.out.println(phone2 + " is in a valid format");
}