为什么这个正则表达式不起作用即使它是有效的并且在测试代码上运行良好

时间:2011-05-30 06:16:39

标签: javascript asp.net regex validation file-upload

我已经在SO上发了几篇帖子,与此有关但是这是另一个适用于测试代码而不是使用正确的表达式验证器控件 clientScript已启用我希望fileUpload是在上传时在客户端验证。

<asp:RegularExpressionValidator id="rgvFile" runat="server" font-bold="true" errormessage="Only pdf, txt, doc, docx, png, gif, jpeg, jpg, zip, rar files allowed"
cssclass="rgvfile" enableclientscript="true" display="Dynamic" controltovalidate="fileUpload"
validationexpression="(.pdf|.txt|.doc|.docx|.png|.gif|.jpeg|.jpg|.zip|.rar)$"
text="Only pdf, txt, doc, docx, png, gif, jpeg, jpg, zip, rar files allowed" tooltip="Only certain files allowed. Filename must be within 30 letters and cannot contains invalid characters"></asp:RegularExpressionValidator>

验证表达式检查是否有效的文件扩展名[忘记扩展名伪造,更改文件扩展名和上传完成。]。我在regExHero上面测试过,regexBudy所有验证文件。我也在下面测试过它。

"domreference.pdf".match(/(.pdf|.txt|.doc|.docx|.png|.gif|.jpeg|.jpg|.zip|.rar)$/);
产生[.pdf,.pdf]

是正确的。但是当在Regular Expression验证器中使用时,它甚至不验证正确的文件名。

2 个答案:

答案 0 :(得分:3)

首先,请注意你没有逃脱这些点:

\.(pdf|txt|doc|docx|png|gif|jpeg|jpg|zip|rar)$

答案 1 :(得分:1)

这不起作用,因为Microsoft编写的脚本不是跨浏览器,而且它们从不使用它。

function RegularExpressionValidatorEvaluateIsValid(val) {
    var value = ValidatorGetValue(val.controltovalidate);
    if (ValidatorTrim(value).length == 0)
        return true;
    var rx = new RegExp(val.validationexpression);
    var matches = rx.exec(value);
    return (matches != null && value == matches[0]);
}

其中`val = FileUpload的值',每个浏览器都不同。因此,即使找到了有效匹配,最后一个return语句也会返回false,因为在这种情况下,value永远不会等于匹配