2017-07-29 65 views
6

正則表達式表達:對我使用下面的代碼E.164不工作

Pattern p = Pattern.compile("^\\+?[1-9]\\d{1,14}$"); 
    stringNumber=stringNumber.replace(" ",""); 
    Matcher m = p.matcher(stringNumber); 


    if (!m.matches()) 
    { 
    [...] 
    } 

而且圖案,這是應該的E.164格式正確檢測數字,不能正常工作,因爲我覺得它應該,因爲它是有效的E.164電話號碼,格式爲XXXXXXXXX的數字,X爲0到9之間的所有數字。儘管我期待這種模式,但我不明白爲什麼。

限制性較低的模式「^ \ +?\ d {10,14} $」確實正在工作,因爲它檢測到一些XXXXXXXXX不適合該格式。

也許最後一個模式足夠用於我的應用目的,但我想使用第一個模式(可以確定每個電話號碼都採用E.164格式),以獲得更大的範圍即使這些可能性很少,也是可能的。

什麼可能導致第一種模式的意外行爲?

+0

XXXXXXXXX是否有任何理由不被您的模式接受? – TomekK

+0

@TomekkK,只是模式上的+我認爲它不應該匹配那種模式,儘管它發生。 – user2638180

+0

你想要在前面加「+」號嗎? – tima

回答

4

要使編號在前面有+,您的正則表達式應該是​​。請注意0​​的刪除,這意味着+是可選的。

此外,第二個模式與輸入不匹配的原因不是因爲+,而是因爲第二個模式至少需要10位數字,而您使用的示例是9位數字。

+0

你說得對,我忘了? – user2638180

相關問題