用于电话号码的JavaScript RegEx,允许使用#符号,但不允许使用字母字符



我正在尝试为电话号码构建一个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组
  • $—字符串结束

相关内容

  • 没有找到相关文章

最新更新