我正在尝试为电话号码构建一个javascript正则表达式。
我现在有这个。。。但它正在失败。
^(?([0-9]{3}))?[-. ]?([0-9]{3})[-. ]?([0-9]{4})?[#. ]?([0-9]{10})$
示例:
(555) 555-1212 - Acceptable
(555) 555-1212 #12525 - Acceptable (Up to 10 digits after the # sign)
5555551212 - Acceptable
555-555-1212 - Acceptable
555-555-1212 #12525 - Acceptable (Up to 10 digits after the # sign)
任何字母字符都应该是不可接受的
(555) 555-1212 ext 12525 - Unacceptable
(555) 555-1212 x12525 - Unacceptable
Regex一直是我的薄弱环节,我不确定如何让它发挥作用。
这将匹配所有测试用例,但如果其中任何一个混合,它仍然可能失败。
(?d{3})?[- ]?d{3}[-]?d{4}( #d{1,10})?
最好的办法是为您想要接受的每种格式制作一个单独的regex,然后根据所有格式测试字符串,看看是否匹配。
我建议使用regex测试仪实时查看查询匹配情况。
https://regex101.com/
您可以使用
^(?([0-9]{3}))?[-. ]?([0-9]{3})(?:[-. ]?([0-9]{4}))?(?:[#. ]+([0-9]{1,10}))?$
请参阅regex演示。
要点是:1(将[#. ]?
变为[#. ]*
,因为在接下来的数字之前可能有空格和#
(或者可能也有.
(;2([0-9]{10}
变为[0-9]{1,10}
,以匹配一到十个数字。
详细信息
^
-字符串的开头(?
-可选(
([0-9]{3})
-第1组:三位)?
-可选)
[-. ]?
-可选分隔符([0-9]{3})
-第2组:三位(?:[-. ]?([0-9]{4}))?
-可选分隔符的可选序列和捕获到组3中的四位数字(?:[#. ]+([0-9]{1,10}))?
-一个或多个分隔符的可选序列,然后将一到十个数字捕获到第4组$
—字符串结束