两种电话号码格式之一的正则表达式

时间:2017-03-09 08:33:22

标签: java ruby regex

我只想匹配以下任何一种格式:

(444) 444-4444

444-444-4444

以下是两个接近的表达式:

((?:(\(\d{3}\)\s)|(\d{3}-))\d{3}-\d{4})

((\(\d{3}\)\s)|(\d{3}-))\d{3}-\d{4}

两者都说,使用(###)###-,然后添加###-####

问题是两个示例都匹配(###-###-####和其他碰巧包含我所需字符串的模式。

如何确保确切的字符串匹配?

我在开始时已经看过一些带有插入符号的例子,但我还没有得到这个工作。我在红宝石工作。谢谢。

3 个答案:

答案 0 :(得分:0)

input = ['(444) 444-4444', '444-444-4444', '444 444-4444']
input.grep /\A(\(\d{3}\) |\d{3}-)\d{3}-\d{4}\z/
#⇒ [
#   [0] "(444) 444-4444",
#   [1] "444-444-4444"
#  ]

答案 1 :(得分:0)

您可以使用:

public static void main(String[] args) {
    System.out.println("Pn (444) 444-4444 : " + validatePhoneNumber("(444) 444-4444"));
    System.out.println("Pn 444-444-4444 : " + validatePhoneNumber("444-444-4444"));
}

private static boolean validatePhoneNumber(String phoneNo) {
    if (phoneNo.matches("\\d{3}[-\\.\\s]\\d{3}[-\\.\\s]\\d{4}")) {
        return true;
    } else return phoneNo.matches("\\(\\d{3}\\) \\d{3}-\\d{4}");
}

答案 2 :(得分:0)

/^(((\(){1}(\d){3}(\){1}))(\ )(\d){3}(\-)(\d){4}|((\d){3}(\-)(\d){3}(\-)(\d){4}))/gm

使用这个正则表达式,我已经对它进行了测试,它适用于两种格式

您可以使用本网站进行进一步测试 http://www.regextester.com/6