RegEx电话号码没有连续的重复号码

时间:2011-12-14 01:36:29

标签: asp.net regex validation

我目前用于电话号码验证的RegEx是^\d{8,}$,它验证最小长度是8并且不允许使用特殊字符或字母而我的问题是RegEx不允许9-15个连续重复数字加上当前条件(最小长度为8,不允许使用特殊字符或字母)。

...谢谢

3 个答案:

答案 0 :(得分:1)

如果我正确理解您的要求,这个正则表达式将会这样做:

/^(?!.*(\d)\1{8})\d{8,}$/

这是一个注释版本(使用C#语法):

Regex regexObj = new Regex(@"
    # Match digits sequence  with no same digit 9 times in a row.
    ^                # Anchor to start of string
    (?!.*(\d)\1{8})  # Assert no digit repeats 9 times.
    \d{8,}           # Match eight or more digits.
    $                # Anchor to end of string", 
    RegexOptions.IgnorePatternWhitespace);

答案 1 :(得分:1)

以更好的方式理解正则表达式

NODE EXPLANATION

  ^                        the beginning of the string
   (?!                      look ahead to see if there is not:
    .*                       any character except \n (0 or more times
                         (matching the most amount possible))
     (                        group and capture to \1:
      \d                       digits (0-9)
     )                        end of \1
    \1{8}                    what was matched by capture \1 (8 times)
   )                        end of look-ahead
  \d{8,}                   digits (0-9) (at least 8 times (matching
                       the most amount possible))
 $                        before an optional \n, and the end of the
                       string

答案 2 :(得分:0)

所以11111111(8 1 s)没问题,但是111111111(9 1 s)不是吗?

正则表达式总是正确的答案。我会保留现有的^\d{8,}$正则表达式,然后分别检查重复的数字。既然你现在只是(现在?)禁止10个不同的数字,你可以设置一个禁止数字的哈希并检查它:

my %forbidden = map { $_ x 9 => 1 } 0..9;

...

if ($num =~ /^\d{8,}$/ and not $forbidden{$num}) {
    # accept
}
else {
    # reject
}