2013-11-26 35 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