我在表单输入中有以下模式属性:
pattern="^((https?:\/\/)?(www\.)?|(www\.))[a-zA-Z0-9-]+\.[a-zA-Z]{2,}(\/\S*)?$"
它应该做非常基本的客户端URL验证,并接受以下用户输入:example.com
、example-test.com
、https://example.com
、http://example.com
,但不是examplecom
或examplecom.
大约一年前,它在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>
1条答案
按热度按时间tuwxkamq1#
我遇到了同样的问题,现在已经解决了。以下字符在Chrome中无法使用。
一些以前有效的模式现在是错误的,特别是那些字符类包含非转义特殊字符或双标点符号的模式
见下文... https://github.com/whatwg/html/pull/7908