问题描述
||
我已经在此处发布了与之相关的几篇文章,但这是另一篇适用于测试代码的文章,不适用于启用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,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]
是正确的。但是,当在正则表达式验证器中使用时,它甚至不会验证正确的文件名。
解决方法
首先,请注意,您没有逃脱这些点:
\\.(pdf|txt|doc|docx|png|gif|jpeg|jpg|zip|rar)$
, 这是行不通的,因为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永远不会等于匹配