2013-11-26 34 views
1

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

我目前的正则表达式:

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

在此先感谢您的帮助。

+0

请注意,{n,n}与{n}相同,您可以完全删除“{1,1}”,因为默认值为“单一匹配”。 – h2ooooooo

+0

根据正则表达式标记,你使用哪种语言的正则表达式? – zzzzBov

+0

'0122224444'它有效吗?或者'0133333334'? – HamZa

回答

7

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

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

几点:

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

上述正则表达式使用负先行断言 - (?!(\d)\1{7})断言,8个位数在第一个2之后,并不完全相同。如果断言是真实的,那么它匹配接下来的8位数字。

  • (\d)捕捉在第1组
  • 第一位数然后\1反向引用所捕获组来匹配由\d
  • {7} 7倍相匹配的反向引用匹配的相同的数字。这意味着 - (\d)\1{7}匹配8次相同的数字。
+1

你的速度比较快,所以+1,另一方面不要忘记你可以改变角色类为'[1-59]': )。 –

+1

@Sniffer。刚刚更新:) –

+1

+1的准确性和速度:) – anubhava