javascript中字符类中的范围无序
我不知道为什么我的正则表达式不正确:javascript中字符类中的范围无序,javascript,regex,validation,Javascript,Regex,Validation,我不知道为什么我的正则表达式不正确: var domain = "google\.com\.br"; var reEmail = new RegExp("^([A-Za-z0-9_\-\.])+\@" + domain + "$"); 我需要这个来验证电子邮件。下面的示例:reEmail.test(“contact@google.com.br"); 我得到这个错误: 范围在字符类中顺序不正确因为您使用字符串创建RegExp,\-\.将变为\.,这是无效的范围。 (它的范围是从\uu到,这是不正
var domain = "google\.com\.br";
var reEmail = new RegExp("^([A-Za-z0-9_\-\.])+\@" + domain + "$");
我需要这个来验证电子邮件。下面的示例:reEmail.test(“contact@google.com.br");代码>
我得到这个错误:
范围在字符类中顺序不正确因为您使用字符串创建RegExp,\-\.
将变为\.
,这是无效的范围。
(它的范围是从\uu
到
,这是不正确的)
您需要加倍逃逸它:
newregexp(“^([A-Za-z0-9\\-\\.])+@“+域+”$”;
这样,\
就成为字符串中的一个\
,然后用于转义RegExp中的-
编辑:
如果您通过字符串创建RegExp,那么记录结果总是很有帮助的,这样您就可以看到您是否做对了:
e、 g.您在RegExp中的角色
console.log(“^([A-Za-z0-9\-\.])+\@”);
结果:
^([A-Za-z0-9.]+@
使用正则表达式文字:/^([a-Za-z0-9\-.])+@/
!!!另一方面,处理此问题的快速方法是,如果需要允许-
作为字符组中的有效字符,请始终将其作为组中的第一个或最后一个字符放置(例如,[-a-zA-Z0-9 quo;]
或[a-zA-Z0-9 quo-]
)。正则表达式足够聪明,可以知道如果字符处于这些位置,您没有指定该字符的范围(无需用斜杠转义)。@talemyn确实如此。就我个人而言,我更喜欢避开它(并且将其设置到我们的编码指南中),因为它有一个特殊的含义。这应该是可以接受的答案。@talemyn的精彩添加also@talemyn这是个很酷的把戏。然而,对于任何一个涉及一个以上开发人员和一天的项目,下一个开发人员(包括明天的您)可能不知道/不记得这个技巧!因此,当他们想在范围中添加一个新字符(比如
)时,他们可能只会将其放在开头(即[#-a-zA-Z0-9.]
),而整个公司需要三天的时间才能弄清楚为什么它现在被破坏了!