"^(((\+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
。
答案 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根本不接受字符串中的\
(因为\
未转义)。转而使用\
转义\\
。