提问人:DuckSoup 提问时间:5/19/2023 最后编辑:DSDmarkDuckSoup 更新时间:5/20/2023 访问量:3768
对 RegExp u 标志有效,但对 v 标志无效
Valid with the RegExp u flag, but not with the v flag
问:
我收到此正则表达式模式的以下控制台警告:
^[a-zA-Z0-9+_.-]+@[a-zA-Z0-9]+\\.[a-zA-Z0-9]+$
Pattern 属性值对 RegExp 标志有效,但对标志无效:Uncaught SyntaxError: Invalid regular expression: 无效。字符类中的字符无效。
^[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
答:
19赞
Wiktor Stribiżew
5/19/2023
#1
问题在于,新引入的 v
标志对转义规则施加了更多限制。由于它允许字符类减法和交集,因此字符类末尾的文字不能不转义。-
所以,如果你使用标志,就没有这样的限制,有了标志,它就到位了。参看。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 标志)或双标点符号的模式:
(
)
[
{
}
/
-
|
\
]
[(] [)] [[] [{] [}] [/] [-] [|] [&&] [!!] [##] [$$] [%%] [**] [++] [,,] [..] [::] [;;] [<<] [==] [>>] [??] [@@] [``] [~~] [^^^] [_^^]
评论
1赞
oriberu
5/19/2023
很高兴知道。您提供的链接中的这一小节专门讨论了手头的问题:v 标志与 u 标志有何不同?
0赞
Wiktor Stribiżew
5/19/2023
@oriberu我在问题中添加了这些相关细节,那肯定会有所帮助。
0赞
TylerH
12/17/2023
这个答案可以通过解释为什么控制台/解析器警告 OP 他们没有明确包含在其正则表达式模式中的标志而受益。特别是因为这不是他们问的,而且你把标题改成了关于那些旗帜的。否则,可能需要还原标题。
上一个:A2P 合规性 CSV 与监管/消息服务 API 不匹配
下一个:电话号码验证
评论
-
\-