【问题标题】:How can I escape characters inside of this regular expression?如何转义此正则表达式中的字符?
【发布时间】:2010-09-23 18:31:34
【问题描述】:

我有这个功能可以验证电子邮件地址。 jsLint 使用正则表达式报错,抱怨某些字符未被转义。

有没有办法正确逃避它们?

var validateEmail = function(elementValue){
    var emailPattern = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/;
    return emailPattern.test(elementValue);
};

【问题讨论】:

  • 这已经得到解答,但作为一个辅助 Rexex.Escape 是一个方便的函数,用于转义正则表达式中的特殊字符。

标签: javascript regex jslint


【解决方案1】:

您使用的正则表达式有效的。但我猜 JSLint 抱怨字符类中 - 前面缺少转义符号:

/^[a-zA-Z0-9._\-]+@[a-zA-Z0-9.\-]+\.[a-zA-Z]{2,4}$/

仅当 - 不在字符类的开头或结尾,或者在两个字符之间使用时不表示范围时,才需要在字符类中转义。

以下是一些有效的示例:

/[-xyz]/    // "-", "x", "y", "z"
/[xyz-]/    // the same as above
/[-]/       // "-"
/[a-z-]/    // "a"-"z", "-"
/[a-b-c]/   // "a"-"b", "-", "c"

【讨论】:

    【解决方案2】:

    我没有立即看到需要转义的内容。您可能想为您的正则表达式尝试/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/i。我只是稍微整理了一下,并在第一个字段中添加了+%

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-05
      • 2020-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-22
      • 2010-09-21
      相关资源
      最近更新 更多