JavaScript正则表达式不适用于Java

时间:2012-04-10 07:43:32

标签: java javascript regex

"^(((\+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 sequence

2 个答案:

答案 0 :(得分:6)

您需要将所有\替换为\\ 话虽如此,看起来您的正则表达式对于电话号码来说有点复杂? 我看到GB(+44)的国家/地区代码包含了很多次,所以我想你可以只说一次:

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

其余的正则表达式是elipsis。

使这个更清晰的另一个想法是将这个正则表达式分解为几个,例如:

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;

在我看来,这段代码维护起来要简单得多。

答案 1 :(得分:3)

那是因为Java根本不接受字符串中的\(因为\未转义)。转而使用\转义\\