无效的正则表达式:单独的量词括号

时间:2016-12-02 18:59:23

标签: regex

我有一个接受这些格式的html手机模式:

+61 x xxxx xxxx,
+61xxxxxxxxx,
0x xxxx xxxx,
0xxxxxxxxx,
xxxx xxxx,
xxxxxxxx,
+xx xxx xxx xxx,
+xxxxxxxxxxx,
0xxx xxx xxx,
0xxxxxxxxx

几个月前它正在工作,现在我的手机领域突然无法验证。我有这个错误:

Pattern attribute value ^(?:0|\(?\+61\)?\s?|0061\s?)[1-79](?:[\.\-\s]?\d\d){4}|(\d{4}[\s]\d{4})|(\d{8})|(\d{4}[\s]\d{3}[\s]\d{3})|(\+61\[\s]\d{3}[\s]\d{3}[\s]\d{3})|(\+61\s\d{3}\s\d{3}\s\d{3})$ is not a valid regular expression: Uncaught SyntaxError: Invalid regular expression: /^(?:0|\(?\+61\)?\s?|0061\s?)[1-79](?:[\.\-\s]?\d\d){4}|(\d{4}[\s]\d{4})|(\d{8})|(\d{4}[\s]\d{3}[\s]\d{3})|(\+61\[\s]\d{3}[\s]\d{3}[\s]\d{3})|(\+61\s\d{3}\s\d{3}\s\d{3})$/: Lone quantifier brackets 

2 个答案:

答案 0 :(得分:3)

到目前为止,没有人愿意在你的模式中显示错误。

class YourClass {
    private static final Map<Color, String> COLOR_NAMES = new HashMap<>();

    static {
        COLOR_NAMES.put(Color.red, "red");
        //
    }

    public static getName(Color color) {
        return COLOR_NAMES.get(color);
    }
}

你错误地插入了一个反斜杠,逃离了开口括号,因此将它作为一个普通字符并留下右括号…|(\+61\[\s]\d{3}[\s]\d{3}[\s]\d{3})|(\+61\s\d{3}\s\d{3}\s\d{3})$ ^ 。 (遗憾的是,错误信息有些误导,因为这些括号当然不是Lone。)

答案 1 :(得分:0)

这意味着,模式无效。

如果您想匹配澳大利亚的手机,可以使用:

pattern="^(?:0|\(?\+61\)?\s?|0061\s?)[1-79](?:[\.\-\s]?\d\d){4}$"
找到模式here

实施例: https://jsfiddle.net