【问题标题】:Regex to match a phone number that is not composed of all the same number正则表达式匹配不是由所有相同号码组成的电话号码
【发布时间】:2016-09-29 18:57:08
【问题描述】:

我需要一个正则表达式来匹配并非全部由相同号码组成的电话号码。我说的是一个 10 位数的电话号码,看起来像 (123)123-1234。我见过可以匹配相同的手机的模式,但我试图匹配相反的。

我想出了这个,哦,非常接近,但不完全在那里。

^\((\d)(?!\1{2})\d{2}\)(?!\1{3})\d{3}-(?!\1{4})\d{4}$

唯一失败的地方是区号都是相同的数字,其他一切似乎都很好。所以它会在这样的(888)123-1234上失败,但会通过(886)123-1234

我如何让它接受最后的坚持?

我见过类似的问题

how to Validate a Phone number so that it should not allow all same numerics like 99999999999 or 11111111111 in java

但是这个没有考虑 () 和 -,它也与我想要的相反。

Regex to block a phone number that contains same digit more than 4 times successively?

这种看起来很有希望,但它没有考虑到 () 和 -。

【问题讨论】:

  • 为什么不在检查之前从字符串中删除()- 字符?
  • 你能提供什么是好什么是坏的测试用例吗?我不明白为什么(888)123-1234 好而(886)123-1234 不好。或者你是说两者都应该是好的?如果是,为什么?
  • @TimRoberts,我正在尝试将此作为模式属性添加到 html 输入中
  • @KennethK.,反过来 (888) 不好。

标签: javascript regex


【解决方案1】:

您可以使用这个否定的前瞻正则表达式:

^\((\d)(?!\1{2}\)\1{3}-\1{4}$)\d{2}\)\d{3}-\d{4}$

RegEx Demo

如果从头到尾重复相同的数字,则负前瞻 (?!\1{2}\)\1{3}-\1{4}$) 只会导致匹配失败。

【讨论】:

    猜你喜欢
    • 2010-12-16
    • 2020-01-18
    • 1970-01-01
    • 2022-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多