2011-09-03 128 views
1

我創建了一個正則表達式驗證電話號碼有以下要求:加強正則表達式來驗證電話號碼

  • 允許的字符:+ space () – 0-9

  • +(可以像(+61) 312 405 678修剪後第一個字符或+61 312 405 678

  • 短劃線在數字的任何位置都是允許的。

  • 長分8最大16 - 中的邊界條件

的情況下顯示錯誤,但我需要提高它一下。我想驗證,如果+在數字中,它必須只在開始,但我的正則表達式不檢查這個。請幫忙。這是我的正則表達式到目前爲止:

^[\\(?\\+?(\\d{2})\\)?[- ]?(\\d{0,})[- ]?(\\d{0,})[- ]?(\\d{0,})]{9,16}$ 
+0

[對電話號碼驗證全面的正則表達式(http://stackoverflow.com/questions/123559/a-comprehensive-regex-for-phone-number-validation) –

+0

@布萊恩 - 羅奇可能重複:我檢查所有的正則表達式都提供了它們,它們都具有我剛剛提到的有關打開和關閉括號的相同問題。 –

回答

1

添加\ + {0,1}應該做的伎倆。

完成後的正則表達式應該是這樣的

^\+{0,1}[\(?\+?(\d{2})\)?[ -]?(\d{0,})[- ]?(\d{0,})[- ]?(\d{0,})]{9,16}$

+0

這很接近,但「+」可以在第一個「()」或外部。我只注意到他的整個正則表達式是一個組,我不認爲他是需要的。 –

+0

@ brian-roach:是的,這就是我需要增強我已經創造的! –

+0

還我只是檢查了一些更多的測試案例和上述正則表達式失敗:+61)456 789 980 它應該說明了上面的輸入錯誤,我們不要有一個開放的支架,但它是爲同一給予如此! –

0

我會扔掉所有可選角色,然後檢查是否匹配\\+?\\d{8,16}

或者,允許任意位置的任意數量的標點符號; [\\s().-]*(\\+[\\s().-]*)?(\\d[\\s().-]*){8,16}

+0

找到解決方案,認爲它可能幫助別人的未來:??? ^ [[\\ + \\ d {2}] [\\ \\小號 - ] [\\ d [\\ - \ \ s]?]] {9,15} $ | [\\({1}] \\ + {1} \\ d {2} [\\){1}] [[\\ s \\ - ]] ?[?\\ d [\\ - \\ S]]] {9,10} $ 這篇自己atlast;) –

+0

你的正則表達式看起來威猛奇怪,如果有多個連續的空格會失敗。 – tripleee

+0

你可以提出任何改進? –