1

我有一个手机号码字段,我想检查它是否有任何数字重复 9 次,包括零,以及是否任何电话号码或手机号码仅由两个不同的数字组成。

是否有任何正则表达式或其他东西可以做到这一点?

在葡萄牙,电话号码以 2######## 开头,手机号码以 91/92/93/96 开头,两者都有 9 位数字。

4

2 回答 2

3

试试这个正则表达式:

^(?:(?:(2)([013-9])|(9)([1236]))(?!(?:\1|\2){7})(?!(?:\3|\4){7})\d{7}|(?=2{2,7}([^2])(?!(?:2|\5)+\b))22\d{7})\b

正则表达式住在这里。

解释:

^                              # from start
(?:                            # look at (?:...) as subsets
  (?:                          # 
    (2)([013-9])|(9)([1236])   # store possible digits in groups \1 \2 \3 \4
  )                            #
  (?!(?:\1|\2){7})             # in front cannot repeat only \1 \2
  (?!(?:\3|\4){7})             # neither only \3 \4
  \d{7}                        # plus seven digits to complete nine
|                              # or
  (?=                          # to avoid number repetitions:
    2{2,7}([^2])               # in front should be possible to match
                               # the number 2 from 2 to seven times 
                               # and another digit stored in \5
    (?!(?:2|\5)+\b)            # but not only them,
                               # so, should match another digit 
                                   # (not two or the \5) till the boundary
  )                            #
  22\d{7}                      # then, it refers to 22 and 7 digits = nine
)\b                            # confirm it don't overflows nine digits

希望能帮助到你。

于 2015-12-15T15:22:45.330 回答
3

此正则表达式将仅匹配以下 9 个以 2 或 91、92、93、96 开头的数字

^(?:2\d|9[1236])[0-9]{7}$

^= 字符串开头

(?:2\d|9[1236])= 2 + 任何数字9 后跟 1、2、3 或 6

[0-9]{7}= 7 个数字

$= 字符串结尾

于 2015-12-15T15:16:58.750 回答