正则表达式在javascript中以双引号提供时不起作用

时间:2009-11-22 19:43:54

标签: javascript jquery regex

我试图在javascript中使用常规尝试,但它无法正常工作。我的自定义控件包含由用户提供的名为RegEx的属性,我需要根据此正则表达式验证输入值。由于JS中的属性将使用双引号(“”),因此regualr表达式失败(case -1)。案例2成功地认为案例regualr表达式是相同的,唯一的区别是case-1它是双引号。谁能告诉我为什么它不起作用。 RegexExp =“/ ^ \ d {5} $ /” - 在我的aspx页面

var value = "11111";
     if(value.toString().search($(element).attr('RegexExp')) != -1)
    {
        return true;
    }
    else
    {
        return false;
    }

  var reg = /^\d{5}$/;
     if(value.toString().search(reg) != -1)
    {
        return true;
    }
    else
    {
        return false;
    }

4 个答案:

答案 0 :(得分:2)

请改为:

var reg = new RegExp($(element).attr('RegexExp'));

更新:您还需要删除/字符,因为这些不应该提供给RegExp构造函数:

var regexExp = $(element).attr('RegexExp');
var reg = new RegExp(regexExp.substring(1, regexExp.length - 1));

答案 1 :(得分:2)

我假设您发布的代码是return语句中函数的一部分,但如果不是,则第一个问题是return不允许在函数一侧使用。

无论如何,请尝试以下方法。您可以使用其正式构造函数

从字符串创建RegExp
value.search(new RegExp($(element).attr('RegexExp')));

此外,您不需要对值使用toString(),因为它已经是一个字符串,并且您的代码不必要地冗长。以下内容相当于您的第一个if else声明

return value.search(new RegExp($(element).attr('RegexExp'))) != -1;

修改

如果您希望能够将表达式传递为“/ [expression] /”或“/ [expression] / gi”,则可以执行以下操作:

var toRegExp = function(regexString) {
    var expression   = regexString.substr(1),        // remove first '/'
        closingSlash = expression.lastIndexOf("/");  // find last '/'

    return new RegExp(
        // Expression: remove everything after last '/'
        expression.substr(0, closingSlash), 
        // Flags: get everything after the last '/'
        expression.substr(closingSlash+1)
    );
}

....

value.search( toRegExp($(element).attr('RegexExp')) );

答案 2 :(得分:0)

首先,使用自定义属性来保存正则表达式。其次,“RegexExp”是多余的 - 就像说“正则表达式”。第三,要从String转换为RegExp,必须用new RegExp()包装字符串; JavaScript并不是弱类型的。也就是说,假设正则表达式没有设置为服务器端,我建议使用jQuery's data API。它具有额外的优势,它可以直接存储正则表达式对象。

设置:

jQuery.data($(element).get(0), "regexp", /^\d{5}$/);

获得:

jQuery.data($(element).get(0), "regexp");

但最终,你真正想要的是jQuery Validation plugin。它完成了你需要的一切,然后是一些。顺便说一下,它在内部使用数据API来发挥它的魔力。

答案 3 :(得分:0)

/.../语法用于在Javascript中声明正则表达式对象,因此您不应该使用它来指定正则表达式模式,它应该只是regexp="^\d{5}$"作为属性。

搜索方法将正则表达式对象作为参数,因此您必须根据从属性中获取的字符串创建正则表达式对象:

var reg = new RegExp($(element).attr('regexp'));
if (value.toString().search(reg) != -1) {

(你看到与你的第二个案件相似吗?)

或者作为单个表达式:

if (value.toString().search(new RegExp($(element).attr('regexp'))) != -1) {