2015-11-02 57 views
2

我提供以下正則表達式:^((?:\ + 27 | 27)| 0)(\ d {9})$ 爲南非的數字,並且只想返回true以+27或27或0開始。 27832227765,27838776654或0612323434.Java的正則表達式電話號碼

我試着使用: regexplanet.com

regex test

但都返回假不管我進入(即使是簡單的正則表達式)。

有人知道我在做什麼錯嗎?

+1

你剛剛檢查過在線測試儀或代碼中的正則表達式嗎?在Java代碼中,'^(\\ +?27 | 0)(\\ d {9})$'應該可以工作。在測試儀中,'^(\ +?27 | 0)(\ d {9})$'應該可以工作。 –

+0

對不起我的壞。好回答 –

+0

我發佈了我的答案,請檢查。 –

回答

0

這應該工作,這裏是一個variant。 (我刪除^和$在這個例子中):

((?:\+27|27|0)(?:\d{9})) 
3

在Java代碼中,你需要加倍反引號,並且在在線測試儀,反斜槓必須是單身。

另外,如果與String#matches一起使用,則不需要使用字符串標記的開始和結束,因爲此方法需要完整的字符串匹配。

這裏是你的Java代碼如何看起來像:

String rex = "(\\+?27|0)(\\d{9})"; 
System.out.println("+27832227765".matches(rex)); // => true 
System.out.println("27838776654".matches(rex)); // => true 
System.out.println("0612323434".matches(rex)); // => true 

IDEONE demo

如果使用String#find,你將需要^$錨,你在原來的正則表達式有。

注予縮短((?:\+27|27)|0)(\+?27|0)作爲?量詞裝置1或0的出現。額外的分組在這裏真的是多餘的。此外,如果你不使用捕獲文本,我建議開啓第一組到非捕獲(即(?:\+?27|0)),然後卸下圓括號從\d{9}

String rex = "(?:\\+?27|0)\\d{9}";