javascript中字符类中的顺序乱序

Wil*_*eri 35 javascript regex validation

我不知道因为我的正则表达式不正确:

var domain = "google\.com\.br";
var reEmail = new RegExp("^([A-Za-z0-9_\-\.])+\@" + domain + "$");
Run Code Online (Sandbox Code Playgroud)

我需要这个来验证电子邮件,例如: reEmail.test("contact@google.com.br");

我收到此错误:

字符类中的范围乱序

t.n*_*ese 73

因为使用String创建了RegExp,所以_\-\.变为_-. 无效范围.(这是一个范围从_ ,.并且不正确)

你需要双倍逃脱它:

new RegExp("^([A-Za-z0-9_\\-\\.])+@" + domain + "$");
Run Code Online (Sandbox Code Playgroud)

这样,在String中\\成为一个\然后用于-在RegExp中转义.

编辑:

如果您通过String创建RegExp,那么记录结果总是有帮助的,这样您就可以看到是否正确完成了所有操作:

例如,你的RegExp部分

console.log("^([A-Za-z0-9_\-\.])+\@");
Run Code Online (Sandbox Code Playgroud)

结果是:

^([A-Za-z0-9_-.])+@
Run Code Online (Sandbox Code Playgroud)

  • 另一方面,快速处理这个问题的方法是,如果你需要允许`-`作为角色组中的有效字符,请始终将其作为组中的第一个或最后一个字符放置(例如,`[ - a-zA-Z0-9 _]`或`[a-zA-Z0-9 _-]`).正则表达式很聪明,知道你没有指定具有该字符的范围,如果它在那些位置(不需要用斜杠转义它). (16认同)
  • @talemyn 当然是真的。我个人更喜欢逃避它(并将其设置为我们的编码指南),因为它具有特殊含义。 (3认同)