检查是否00000000或11111111或22222222等

Ben*_* B. 1 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
Run Code Online (Sandbox Code Playgroud)

在此先感谢您的帮助.

Roh*_*ain 7

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

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

一些要点:

  • {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次.