如何正确逃避单一报价?

时间:2018-01-04 13:24:44

标签: javascript regex

我有以下正则表达式来验证电子邮件地址:

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;错误。

如何在不允许正斜杠的情况下逃避单引号字符?

编辑:对于评论中的讨论,这是一个截图:

enter image description here

第一个是Visual Studio错误

第二个是Chrome调试器中的行

第三个是当我跳过创建正则表达式时抛出的异常。

1 个答案:

答案 0 :(得分:4)

您不需要在正则表达式文字中转义单引号。

您的案例中的问题是结束您的角色类的-。如果它位于末尾,则它用作文字-,而在两个字符之间使用时会打开一个范围。

您当前的尝试会在+/之间打开该范围,包括,-。 如果您直接使用',则范围无效,因为'的索引低于+

要解决此问题,请转义减号\-或将其再次移至最后。