我正在尝试建立一个电话号码的javascript正则表达式。
我目前有this...but,它失败了。
^\(?([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正则表达式一直是我的一个薄弱环节,我不确定如何让它工作。
发布于 2020-12-31 06:32:14
您可以使用
^\(?([0-9]{3})\)?[-. ]?([0-9]{3})(?:[-. ]?([0-9]{4}))?(?:[#. ]+([0-9]{1,10}))?$请参阅regex demo。
要点是: 1)将[#. ]?转换为[#. ]*,因为在接下来的数字之前可以有空格和# (或者也可能是. ),以及2)将[0-9]{10}转换为[0-9]{1,10}以匹配一到十个数字。
详细信息
^ - string\(?的开始-可选的(([0-9]{3}) -组1:三个digits\)? -可选的)[-. ]? -可选的delimiter([0-9]{3}) -组2:三个digits(?:[-. ]?([0-9]{4}))? -可选的分隔符序列和捕获到组3(?:[#. ]+([0-9]{1,10}))?中的四个数字-一个或多个分隔符的可选序列,然后捕获到组4$中的一到十个数字。发布于 2020-12-31 06:36:33
这将匹配您的所有测试用例,但如果它们中的任何一个混合在一起,它仍然可能失败。
\(?\d{3}\)?[\- ]?\d{3}[\-]?\d{4}( #\d{1,10})?最好的办法是为您想要接受的每种格式创建一个单独的正则表达式,然后针对所有格式测试字符串,看看是否有匹配的。
我建议使用正则表达式测试器来实时查看查询匹配。
https://stackoverflow.com/questions/65514353
复制相似问题