代码之家  ›  专栏  ›  技术社区  ›  Ilja

无法将Unicode标志添加到regex以进行电子邮件检查

  •  1
  • Ilja  · 技术社区  · 7 年前

    我有以下regex字符串来检查有效的电子邮件格式

    /^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/
    

    在它的最后,我想添加unicode标志 u 所以看起来会像这样

    /^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/u
    

    但是,我得到了一个错误,说regex对于unicode标志无效。有没有可能把它放在这里?

    1 回复  |  直到 7 年前
        1
  •  0
  •   piraces    7 年前

    有多种解决方案可用于验证Unicode字符,但不能像这样使用此标志。这个 \u 标志后面最常用的字符代码是 \u00C0 .

    我认为最可靠的解决方案是在regex中指定可接受的unicode字符的范围。

    这样的做法应该管用:

    /^(?!\.)((?!.*\.{2})[a-zA-Z0-9\u00E0-\u00FC.!#$%&'*+-/=?^_`{|}~\-\d]+)@(?!\.)([a-zA-Z0-9\u00E0-\u00FC\-\.\d]+)((\.([a-zA-Z]){2,63})+)$/
    

    这里应用的解决方案是支持从到的字符。

    regex测试仪: https://www.regexpal.com/?fam=108260

    有关Unicode字符匹配的问题: Matching accented characters with Javascript regexes