59

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

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

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

我收到此错误:

字符类中的范围乱序

4

1 回答 1

122

因为您使用字符串创建 RegExp,所以_\-\.变成_-. 了无效范围。(这是一个从_ 到的范围.,这是不正确的)

你需要双重逃避它:

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

这样\\就成为\字符串中的 a ,然后用于转义-RegExp 中的 。

编辑:

如果您通过字符串创建 RegExp,那么记录结果总是很有帮助的,这样您就可以查看您是否做对了所有事情:

例如,您在 RegExp 中的一部分

console.log("^([A-Za-z0-9_\-\.])+\@");

结果是:

^([A-Za-z0-9_-.])+@
于 2013-07-18T15:41:01.663 回答