检查是否00000000或11111111或22222222等

时间:2013-11-26 18:36:05

标签: regex

我有一个正则表达式的问题,以检查(法语)电话号码是否正确。 电话号码必须从1开始,0继续1或2或3或4或5或9,并继续8个号码,但这些号码不能与00000000或11111111相同......

我目前的正则表达式:

/^0(1|2|3|4|5|9){1,1}[0-9]{8,8}/i

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:7)

您可以使用以下正则表达式:

/^0[1-59](?!(\d)\1{7}$)\d{8}$/i

有些观点:

  • {1,1}与被删除一样好。
  • {8,8}{8}一样好。
  • (1|2|3|4..)可以替换为字符类 - [1234]
  • [12345]可以替换为字符类中的范围 - [1-5]

上面的正则表达式使用负前瞻断言 - (?!(\d)\1{7})断言前2个后面的8位数字并不完全相同。如果断言为真,则它匹配接下来的8位数。

  • (\d)捕获第1组中的第一个数字
  • 然后\1反向引用捕获的组以匹配\d匹配的相同数字
  • {7}匹配反向引用7次。这意味着 - (\d)\1{7}匹配相同的数字8次。