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 sequence

4

2 回答 2

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;

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

于 2012-04-10T07:45:42.800 回答
3

那是因为 Java 根本不接受\字符串(因为\未转义)。转而逃走\\\

于 2012-04-10T07:45:27.963 回答