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