2017-08-25 116 views
1

我想寫一個正則表達式,它允許驗證一個電話號碼,可以寫成如下:237 698888888或+237 658888888或67883888 ...,實際上電話號碼必須符合以下條件(+237 | 237)'Space'(6 | 2)(5 | 8 | 2 | 3 | 9 | 7 | 6)[0-9] {7}在Java中的正則表達式在驗證電話號碼不起作用

如果用戶有意輸入一個帶有前綴的號碼,前綴必須是237或+237,否則他決定輸入一個沒有前綴的號碼,在這種情況下,他必須輸入一個9位數的數字,第一位必須是6或2,第二位數字必須在2,3,5,6,7,8和9之間;剩下的7位數字即[0-9] {7}。這裏是我的Java代碼:

String regex = "(\\+237|237)\" \"(6|2)(2|3|[5-9])[0-9]{7}"; 
String sPhoneNumber = "237 278889999"; 
Pattern pattern = Pattern.compile(regex); 
Matcher matcher = pattern.matcher(sPhoneNumber); 
if (matcher.matches()) { 
    Log.e("|==FILTER_NUM==>>","Phone Number Valid"); 
} 
else 
{ 
    Log.e("|==FILTER_NUM==>>","Phone Number must be in the form XXX XXXXXXXX"); 
} 

返回此

E/| == FILTER_NUM == >>:電話號碼必須在形式XXX XXXXXXXX

請檢查我的代碼,並告訴我,什麼是錯的

原諒我的英語:)

+0

那麼問題是什麼?您的正則表達式以您不希望的方式工作,或者您的日誌消息以E /開頭。 –

+0

您是否嘗試從任何在線正則表達式構建器或睾丸驗證您的正則表達式? – Anas

+0

什麼失敗?你能否提供一些應該被視爲有效的電話號碼的例子,但不是嗎? – markusk

回答

0

您的正則表達式

(\\+237|237)\" \"(6|2)(2|3|[5-9])[0-9]{7} 

您正在其中使用空間。改用\\s來檢測一個空間。

你也可以簡化這個

\\+237|237 

\\+?(237) 

最後的正則表達式看起來像

(\\+?(237))\\s(6|2)(2|3|[5-9])[0-9]{7} 
+1

謝謝你也可以跟你的表情一起散步 –

0

你的正則表達式搜索文本引號(")這導致匹配失敗。另外,由於前綴是可選的,因此您需要通過使用?後面的表達式的前綴部分來指明該前綴。

以下正則表達式應該匹配所有樣品的電話號碼:

String regex = "(?:\\+?237)?[26][235-9]\\d{7}";