我收到此正则表达式模式的以下控制台警告:
^[a-zA-Z0-9+_.-]+@[a-zA-Z0-9]+\\.[a-zA-Z0-9]+$
Pattern 属性值
对于 RegExp^[a-zA-Z0-9+_.-]+@[a-zA-Z0-9]+\.[a-zA-Z0-9]+$
标志有效,但对于u
标志无效:v
未捕获的语法错误:无效的正则表达式:。/^[a-zA-Z0-9+_.-]+@[a-zA-Z0-9]+\
字符类中的字符无效。[a-zA-Z0-9]+$/v:
我看不到如何为此警告创建有效的正则表达式模式。请问有人可以解释一下这个错误以及如何解决它吗?
我尝试查看文档,但无法了解如何使其对
v
标志有效
问题在于,新引入的
v
标志对转义规则应用了更多限制。由于 它允许字符类减法和交集,因此字符类末尾的 literal -
不能不转义。
所以,如果您使用
u
标志,则没有这样的限制,使用 v
标志,它就到位了。参见
console.log(/^[a-zA-Z0-9+_.-]+@[a-zA-Z0-9]+\.[a-zA-Z0-9]+$/u.test("[email protected]"))
console.log(/^[a-zA-Z0-9+_.\-]+@[a-zA-Z0-9]+\.[a-zA-Z0-9]+$/v.test("[email protected]"))
因此,在 ECMAScript 模式中始终转义字符类中的文字连字符。
以下是有关哪些模式现在被视为无效的更多详细信息:
一些以前有效的模式现在是错误,特别是那些字符类包含未转义的特殊字符
(
)
[
{
}
/
-
(注意:|
和\
也需要在字符类中转义,但这对于 u 标志来说已经是这样了)或 双标点符号:]
[(] [)] [[] [{] [}] [/] [-] [|] [&&] [!!] [##] [$$] [%%] [**] [++] [,,] [..] [::] [;;] [<<] [==] [>>] [??] [@@] [``] [~~] [^^^] [_^^]