2012-04-10 26 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在字符串中根本不接受\(因为\未转义)。改为使用\\代替\