首页  >  问答  >  正文

标题重写为:"在使用 u 标志时有效,但在使用 v 标志时无效的正则表达式"

<p>我在这个正则表达式模式中遇到了下面的控制台警告:</p> <pre class="brush:php;toolbar:false;">^[a-zA-Z0-9+_.-]+@[a-zA-Z0-9]+\\.[a-zA-Z0-9]+$</pre> <blockquote> <p>Pattern attribute value <code>^[a-zA-Z0-9+_.-]+@[a-zA-Z0-9]+\.[a-zA-Z0-9]+$</code> 是使用 RegExp <code>u</code> 标志有效的,但不适用于 <code>v</code> 标志:Uncaught SyntaxError: Invalid regular expression: <code>/^[a-zA-Z0-9+_.-]+@[a-zA-Z0-9]+\</code>.<code>[a-zA-Z0-9]+$/v:</code> 字符类中有无效字符。</p> </blockquote> <p>我无法看出如何创建一个有效的正则表达式模式来解决这个警告。请问有人能解释一下错误以及如何解决吗?</p> <p>尝试查看文档,但无法找到如何使其适用于 <code>v</code> 标志。</p>
P粉684720851P粉684720851421 天前496

全部回复(1)我来回复

  • P粉116631591

    P粉1166315912023-08-26 13:50:46

    问题在于新引入的v标志对转义规则施加了更多限制。由于它允许字符类的减法和交集,因此字符类末尾的字面量-不能保持未转义。

    因此,如果使用u标志,就没有这样的限制,而使用v标志,则有这样的限制。参见。

    console.log(/^[a-zA-Z0-9+_.-]+@[a-zA-Z0-9]+\.[a-zA-Z0-9]+$/u.test("myname@somesite.com"))
    console.log(/^[a-zA-Z0-9+_.\-]+@[a-zA-Z0-9]+\.[a-zA-Z0-9]+$/v.test("myname@somesite.com"))

    回复
    0
  • 取消回复