我有以下正则表达式来验证电子邮件地址:
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,}))$/;
我需要在@符号前允许'
,所以per this SO answer我更新了我的正则表达式:
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,}))$/;
请注意在第一个捕获块中添加/\'
。
但是,我现在可以在不允许的情况下使用/
保存数据。如果我只是尝试将'
添加到捕获块,则会抛出一个无效的正则表达式&#39;错误。
如何在不允许正斜杠的情况下逃避单引号字符?
编辑:对于评论中的讨论,这是一个截图:
第一个是Visual Studio错误
第二个是Chrome调试器中的行
第三个是当我跳过创建正则表达式时抛出的异常。
答案 0 :(得分:4)
您不需要在正则表达式文字中转义单引号。
您的案例中的问题是结束您的角色类的-
。如果它位于末尾,则它用作文字-
,而在两个字符之间使用时会打开一个范围。
您当前的尝试会在+
和/
之间打开该范围,包括,
和-
。
如果您直接使用'
,则范围无效,因为'
的索引低于+
。
要解决此问题,请转义减号\-
或将其再次移至最后。