2012-12-05 84 views
0

可能重複:
Regular Expression for validating numbers with one space and one optional special character正則表達式驗證以下場景的手機號碼?

我必須寫一個正則表達式來驗證看起來像下面的手機號碼:

一個)。最大12個字符

b)。將允許空間(在非定義點處)

c)中。必須通過的長度最多爲五個數字可選分機號碼.Followed 0

d),不包括字符#

我與以下獲得0-12試圖啓動數字。但我不知道如何添加可選的擴展數字部分(#和後面數字)

^(0(?:\d{0,11}|(?=\d* \d*$)[\d ]{0,12}))$ 
+1

到目前爲止,你做了什麼? –

+0

有幾個在SO上使用regexen驗證電話號碼的答案。對於每種可能的電話號碼格式都可以設想一下正則表達式不是本網站的目標之一。我相信,如果你看看其他一些答案並再次嘗試幾次反覆試驗,你就可以解決這個問題。 –

+0

請不要發佈相同的問題兩次,編輯第一個:http://stackoverflow.com/questions/13717990/regular-expression-for-validating-numbers-with-one-space-and-one-optional- specia –

回答

1

您需要爲每種格式的正則表達式。然後,您可以使用替代構造|將它們組合成單個正則表達式。

第一種模式是最棘手的,但你已經提供了一種通過零寬度正預測先行斷言自己(在這裏我假設空間只允許數字之間)來解決這個問題:

(?=\d+ \d+#)[\d ]{12}#\d{5} 

接下來的模式很簡單:

\d{11} 
最後的模式的

您定義有點模糊,但在做各種假設我已經選擇了這個模式:

\d{1,12}#\d{1,5} 

將合併的正則表達式,則:

^(?=\d+ \d+#)[\d ]{12}#\d{5}|\d{11}|\d{1,12}#\d{1,5}$ 
+0

你不需要10個模式的第一部分,因爲OP顯示他自己的代碼。 – Rawling

+0

@Rawling:感謝您的反饋。我已經更新了我的答案。 –

0

嘗試此正則表達式。它將滿足a,b,c和d條件

(?<=^)([\d\s]{13}|\d{12}|0\d{11}|\d{5})(?=$) 
+0

:我需要的全部內容如下:最多12個字符,將允許一個空格(在非定義點),必須以0開頭,後跟一個可選的分機號碼,長度不超過五位數,不包括#號 – user1863261

+0

@ user1863261:您在評論中描述的要求與您的問題中的要求不匹配,難以正確回答您的問題。 –