Chrome不再接受正则表达式模式

eqfvzcg8  于 2023-09-28  发布在  Go
关注(0)|答案(1)|浏览(85)

我在表单输入中有以下模式属性:

pattern="^((https?:\/\/)?(www\.)?|(www\.))[a-zA-Z0-9-]+\.[a-zA-Z]{2,}(\/\S*)?$"

它应该做非常基本的客户端URL验证,并接受以下用户输入:example.comexample-test.comhttps://example.comhttp://example.com,但不是examplecomexamplecom.
大约一年前,它在Chrome(和其他现代浏览器)上工作得很好,但现在它不再工作了,并给出了一个控制台错误:

Pattern attribute value ^(https?://)?(www.)?(\[a-zA-Z0-9-\]+\[.\])+\[a-zA-Z\]{2,}(/\\S*)?$ is not a valid regular expression: Uncaught SyntaxError: Invalid regular expression: /^(https?://)?(www.)?(\[a-zA-Z0-9-\]+\[.\])+\[a-zA-Z\]{2,}(/\\S)?$/v: Invalid character class\*\

我试图改变模式使其工作,但我只能找到一个解决方案,接受没有连字符的URL(第一个输入中的模式)。奇怪的是,从某个时候起,Chrome开始与字符类语法作斗争,但同样的代码在Firefox和Safari上也能正常工作。
有没有人知道是什么原因导致了Chrome的错误,以及如何让它像Firefox一样工作?
下面是代码示例:

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Test pattern</title>
</head>
<body>
<form id="myForm" onsubmit="event.preventDefault();">

    <label>URL without hyphen (eg example.com)
        <br>
        <input
                pattern="^(https?:\/\/)?(www\.)?(\w+\.)+[a-zA-Z]{2,}(\/\S*)?$"
                class="text-input"
                required
                type="text"
        >
    </label>
    <br>
    <label>URL with hyphen (eg example-dash.com)
        <br>
        <input
                pattern="^((https?:\/\/)?(www\.)?|(www\.))[a-zA-Z0-9-]+\.[a-zA-Z]{2,}(\/\S*)?$"
                class="text-input"
                required
                type="text"
        >
    </label>
    <br>
    <button type="submit">submit</button>
</form>
</body>
</html>
tuwxkamq

tuwxkamq1#

我遇到了同样的问题,现在已经解决了。以下字符在Chrome中无法使用。
一些以前有效的模式现在是错误的,特别是那些字符类包含非转义特殊字符或双标点符号的模式

pattern="[(]"
pattern="[)]"
pattern="[[]"
pattern="[{]"
pattern="[}]"
pattern="[/]"
pattern="[-]"
pattern="[|]"
pattern="[&&]"
pattern="[!!]"
pattern="[##]"
pattern="[$$]"
pattern="[%%]"
pattern="[**]"
pattern="[++]"
pattern="[,,]"
pattern="[..]"
pattern="[::]"
pattern="[;;]"
pattern="[<<]"
pattern="[==]"
pattern="[>>]"
pattern="[??]"
pattern="[@@]"
pattern="[``]"
pattern="[~~]"
pattern="[_^^]"

见下文... https://github.com/whatwg/html/pull/7908

相关问题