如何正确转义单引号?邮箱正则验证允许单引号异常排查
解决邮箱正则允许单引号且不允许斜杠的问题
首先,咱们来梳理下你遇到的核心问题:想让邮箱@前允许单引号,但之前的修改要么引入了不该有的斜杠,要么直接触发正则语法错误。下面给你具体的解决方案和原因分析:
正确的正则写法(正则字面量形式)
直接在@前的字符集中添加单引号',注意把它放在字符集的末尾(避免被解析成字符范围),同时移除多余的斜杠/:
var content = /^([\w._+'-]|(<?))+[a-zA-Z0-9]@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9\_]+\.)+[a-zA-Z0-9-_.]{1,}))$/;
为什么之前的写法出错?
- 添加
/\'导致允许斜杠:在正则字符集里,/是普通字符,你把它加入捕获组后,自然会被当成允许的字符之一,这就是为什么系统会接受带斜杠的邮箱。 - 直接加
'报错:大概率是你把'放在了字符集里的「范围位置」(比如[\w._+-']如果写成[\w._+'-],'-会被解析成从'到-的字符范围,虽然这个范围本身合法,但某些编辑器或JS环境可能会误判;如果是用字符串包裹正则的话,还可能出现引号冲突导致报错)。
如果是用字符串创建正则(new RegExp)
如果你的正则是通过字符串形式传入RegExp构造函数,要注意字符串的转义规则:
- 用双引号包裹字符串时,
'不需要转义:
var content = new RegExp("^([\\w._+'-]|(<?))+[a-zA-Z0-9]@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9\\_]+\\.)+[a-zA-Z0-9-_.]{1,}))$");
- 用单引号包裹字符串时,
'需要转义成\':
var content = new RegExp('^([\\w._+\\'-]|(<?))+[a-zA-Z0-9]@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9\\_]+\\.)+[a-zA-Z0-9-_.]{1,}))$');
这样修改后,正则就会允许@前出现单引号,同时拒绝斜杠,也不会触发语法错误啦。
内容的提问来源于stack exchange,提问作者sab669
相关产品推荐
相关产品推荐

