需要帮助验证一个9位数字。
CANNOT BE
-----------
000000000
111111111
222222222
333333333
444444444
555555555
666666666
777777777
888888888
999999999
4-5个位置不能为00 - 123001234
6-9位置不能为00 - 234550000
九个数字不能连续 - 但目前只有下面的4个四个 -
012345678
123456789
987654321
098765432
我刚刚完成了第一件作品 -
"^(?:(?!0+|1+|2+|3+|4+))\d{9}$"
感谢TON的帮助朋友们。
答案 0 :(得分:3)
我意识到这不是所要求的,但令我感到震惊的是,作为一个独立的方法,而不是正则表达式,这会更容易。
public bool SanityCheckSSN(string ssn)
{
if(ssn == null || ssn.Length != 9) return false;
foreach (char c in ssn)
{
if (!Char.IsDigit(c)) return false;
}
if(ssn == "000000000" ||
ssn == "111111111" ||
ssn == "222222222" ||
ssn == "333333333" ||
ssn == "444444444" ||
ssn == "555555555" ||
ssn == "666666666" ||
ssn == "777777777" ||
ssn == "888888888" ||
ssn == "999999999" ||
ssn == "012345678" ||
ssn == "123456789" ||
ssn == "987654321" ||
ssn == "098765432" ||
ssn.Substring(3, 2) == "00" ||
ssn.Substring(5, 4) == "0000")
{
return false;
}
return true;
}
答案 1 :(得分:3)
可能存在验证所有规则的单个正则表达式,但如果为每个条件编写验证规则(可以是正则表达式),它将更容易,可读和可维护。
作为更一般的评论,正则表达式通常很适合检查字符串是什么,但是在检查字符串不是什么时它们并不是那么好。
答案 2 :(得分:3)
如果 是正则表达式(以详细形式编写):
^ # start of string
(?!(.)\1+$) # not all characters the same
(?!...00) # pos 4/5 not zero
(?!.....0000) # pos 6-9 not zero
(?!012345678) # list of disallowed numbers
(?!123456789)
(?!987654321)
(?!098765432)
[0-9]{9} # match 9 digits exactly
$ # end of string
答案 3 :(得分:0)
相同的数字:
^(\d)\1*$
零组:
^\d{3}00
^\d{5}0*$
序列:
^0?123456789?$
^9?876543210?$
全部放在一起:
^(?!(\d)\1*$)
(?!\d{3}00)(?!\d{5}0*$)
(?!0?123456789?$)(?!9?876543210?$)
\d{9}$
答案 4 :(得分:0)
除了你的“不能顺序”规则之外的一切,我不明白。
^(?!(\d)\1+$)\d{3}(?!0{2})\d{2}(?!0{4})\d{4}$
击穿:
^ # start-of-string
(?! # negative look-ahead (not followed by)
(\d) # a digit, store in group 1
\1+$ # the contents for group 1, repeated until end-of-string
) # end negative look-ahead
\d{3} # three digits
(?! # negative look-ahead (not followed by)
0{2} # two consecutive zeros
) # end negative look-ahead
\d{2} # two digits
(?! # negative look-ahead (not followed by)
0{4} # four consecutive zeros
) # end negative look-ahead
\d{4} # four digits
$ # end-of-string
话虽如此,以上是使用专用函数代替正则表达式的一个很好的理由。