Javascript:RegExp对象创建问题

时间:2010-07-01 00:37:40

标签: javascript validation

我希望使用以下正则表达式来验证文件上传:

/^(([a-zA-Z]:)|(\\{2}\w+)\$?)(\\(\w[\w ]*))+\.(ext)$/

但我希望能够指定ext过滤器。

这是对的吗?

function validateFile(str, ext) {
    alert(str);
    var expr = new RegExp("/^(([a-zA-Z]:)|(\\{2}\w+)\$?)(\\(\w[\w ]*))+\.(" + ext.toLowerCase() + ")$/");
    alert(expr);
    return expr.test(str);  
}

1 个答案:

答案 0 :(得分:1)

使用RegExp构造函数时,不需要在开头和结尾包含斜杠:

var expr = /foo/;

相当于:

var expr = new RegExp("foo");

您只需要在模式字符串上处理双重转义反斜杠(\),例如:

var expr = /\\/;

应该是:

var expr = new RegExp("\\\\");

那是因为在字符串文字中,反斜杠也用于转义字符。

编辑相当于

var expr = /^(([a-zA-Z]:)|(\\{2}\w+)\$?)(\\(\w[\w ]*))+\.(ext)$/;

应该是:

var expr = new RegExp("^(([a-zA-Z]:)|(\\\\{2}\\w+)\\$?)(\\\\(\\w[\\w ]*))+\\.("+
                      ext.toLowerCase + ")$");

请注意,您还可以使用/foo/i构造函数RegExp作为new RegExp("foo", "i")的文字符号使用不区分大小写的标记。