2012-04-10 27 views
0
"^(((\+44\s?\d{4}|\(?0\d{4}\)?)\s?\d{3}\s?\d{3})|((\+44\s?\d{3}|\(?0\d{3}\)?)\s?\d{3}\s?\d{4})|((\+44\s?\d{2}|\(?0\d{2}\)?)\s?\d{4}\s?\d{4})|((\+44\s?\d{4}|\(?0\d{4}\)?)\s?\d{5})|((\+44\s?\d{5}|\(?0\d{5}\)?)\s?\d{5})|((\+44\s?\d{5}|\(?0\d{5}\)?)\s?\d{4}))(\s?\#(\d{4}|\d{3}))?$"; 

我使用上述模式驗證英國電話號碼。它使用JavaScript(客戶端)。但它不能在Java代碼(服務器端)中工作。 錯誤消息說invalid escape sequenceJavaScript正則表達式在Java中不起作用

+0

我要在這裏部署一個最喜歡的引用 - 「你認爲你需要一個正則表達式來解決你的問題,所以你寫一個,現在你有兩個問題。」問題的關鍵在於,也許當正則表達式得到這個大而難看的東西時,是時候考慮另一種方式來解決你的問題了。 – Jon 2012-04-10 08:20:59

回答

6

您需要將您所有的\替換爲\\ 話雖如此,看起來您的正則表達式對於電話號碼有點複雜? 我看到,GB國家代碼(+44)包含了好幾次,所以我想你可以可以說,只有一次:

^(\+44)?(...) 

而正則表達式,其中省略號的休息是。

另一個想法,使之更清楚就是要打破這個表達式分成幾個藥粥每種情況下,如:

if (matches case 1) return true; // example of case one 
if (matches case 2) return true; // example of case two 
if (matches case 3) return true; // example of case tree 
... 
return false; 

在我看來這個代碼將會更簡單維護。

3

這是因爲Java在字符串中根本不接受\(因爲\未轉義)。改爲使用\\代替\