我正在检查电话号码的格式是否正确



我要检查的电话号码有两种格式:

(555) 555-5555555-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");
}

最新更新