【发布时间】:2017-02-08 04:11:00
【问题描述】:
在下面的代码中,我试图让输出成为电话号码的不同格式,以及它是否有效。除了第 11 行的 Java 正则表达式代码字符串模式之外,我想通了一切。
import java.util.regex.*;
public class MatchPhoneNumbers {
public static void main(String[] args) {
String[] testStrings = {
/* Following are valid phone number examples */
"(123)4567890", "1234567890", "123-456-7890", "(123)456-7890",
/* Following are invalid phone numbers */
"(1234567890)","123)4567890", "12345678901", "(1)234567890",
"(123)-4567890", "1", "12-3456-7890", "123-4567", "Hello world"};
// TODO: Modify the following line. Use your regular expression here
String pattern = "^/d(?:-/d{3}){3}/d$";
// current pattern recognizes any string of digits
// Apply regular expression to each test string
for(String inputString : testStrings) {
System.out.print(inputString + ": ");
if (inputString.matches(pattern)) {
System.out.println("Valid");
} else {
System.out.println("Invalid");
}
}
}
}
【问题讨论】:
-
这 4 种是唯一有效的格式吗?除了认为无效?只需为其中每 4 个创建正则表达式,然后
-
请注意,与数字匹配的原子是
\d,而不是/d,如果您在String文字中,则需要将其写为\\d。 -
“123456-7890”是否有效?
-
这是针对哪个国家/地区的?如果您需要验证国际电话号码,则需要先确定国家代码,然后为每个国家应用多个正则表达式。请记住,在一些国家/地区,手机号码与固定电话的长度不同,并且电话号码布局(空格/破折号所在的位置)多年来发生了变化。 IE。我在西班牙的旧(多年前)电话号码是
+34 91 411-6280,但现在它也写成+34 914 116 280。祝你好运。