2013-09-28 47 views
-1

我想驗證一個電話號碼,該電話號碼可以包含10到13位數字,並且可以包含0到3個空格(可以在數據中的任何位置) 。請讓我知道如何做到這一點?用於驗證13位電話號碼的正則表達式是數字,最多可包含3個空格

我嘗試使用正則表達式^(\d*\s){0,3}\d*$其工作正常,但我需要的字符總數限制在13

+1

歡迎來到SO。請閱讀[關於您可以在此處詢問的問題類型](http://stackoverflow.com/help/on-topic)。具體來說:「詢問代碼的問題必須顯示對所解決問題的最低限度理解,包括嘗試解決方案,爲什麼他們不工作以及預期結果。」 – us2012

+0

我試過正則表達式^(\ d * \ s){0,3} \ d * $,它能正常工作,但我需要將字符數限制爲13個。所以我試過^((\ d * \ s){0 ,3} \ d *){10,13} $但不起作用。我對正則表達式很陌生。 – sdinreach

+0

可能重複的[電話號碼驗證綜合正則表達式](http://stackoverflow.com/questions/123559/a-comprehensive-regex-for-phone-number-validation) –

回答

0

你想相同的文字對2個不同的整線的模式相匹配。

這是可以實現的或者通過隨後的匹配模式:

$ cat file 
1234567 90 
1234567890 
123 456 789
123 456 789 01 23 
$ sed -rn '/^([0-9] ?){9,12}[0-9]$/{/^([0-9]+){0,3}[0-9]+$/p}' file 
1234567890 
123 456 789
$ 

,或者您正則表達式引擎(perl的/的 「grep -P」/ JAVA /等)支持向前看符號 - 模式可以combined

// This is Java 
Pattern p = Pattern.compile("(?=^([0-9] ?){9,12}[0-9]$)(?=^([0-9]+){0,3}[0-9]+$)^.*$"); 
System.out.println(p.matcher("1234567 90").matches());  // false 
System.out.println(p.matcher("123 456 789 0123").matches()); // true 
System.out.println(p.matcher("123 456 789 01 23").matches()); // false 
+0

弗拉德!感謝您的回答。當我嘗試1234 890時,它的匹配,但我想匹配輸入至少有10位數字。 – sdinreach

+0

@@ sdinreach,「1234 890」不匹配 - 請參閱http://ideone.com/AEaJdF或粘貼如何應用它的示例 – Vlad

+0

對不起!它是「123456 789」。我想正則表達式匹配至少10個數字,然後允許3個空格。請讓我知道如何做到這一點? – sdinreach

相關問題