似乎使用asp.net正则表达式验证器存在一些问题,它们在firefox中工作,但在某些方面没有(即反之亦然,我不知道)。
无论如何,任何人都可以替换它:
([a-zA-Z1-9]*)\.(((P|p)(D|d)(F|f))|((d|D)(o|O)(c|C)))
基本上将任何文件名/路径与PDF或Doc扩展名匹配?
正如我所说,这在firefox下运行时工作正常,但不是7
编辑:我在这里谈论客户端验证。
答案 0 :(得分:2)
你的表达不是很宽松:
([a-zA-Z1-9]*)
不匹配MyPDF-0.pdf
或更重要的是C:\Path\To\Doc.pdf
。检查表单输入,查看是否有完整的文件路径或只是文件名。
修改强>:
试试这个:
\.([Pp][Dd][Ff]|[Dd][Oo][Cc][Xx]?)$
除非你能使它不区分大小写,比如JavaScript:
/\.(pdf|docx?)$/i
答案 1 :(得分:0)
<script type="text/javascript">
var re = /([a-zA-Z1-9]*)\.(((P|p)(D|d)(F|f))|((d|D)(o|O)(c|C)))/;
var filename = "abcd.PdF";
document.writeln(re.test(filename)); // true in IE 7
</script>
你能提供一个在IE 7中不起作用但在Firefox中有效的测试用例吗?
您可以使用or
或/([a-zA-Z1-9]*)\.(([Pp][Dd][Ff])|([dD][oO][cC]))/
替换所有/([a-z1-9]*)\.((pdf)|(doc))/i
。
<input type="file">
中的值相匹配,那么Internet Explorer可能包含路径,而Firefox则没有(我知道它在服务器上,它可能在客户端上孔)。
好的建议是实际检查您要与正则表达式匹配的值,以确保它符合您的想法。
答案 2 :(得分:0)
你的正则表达式没有任何问题(除了你可以根据其他人的建议进行一些优化)。以下代码在IE 7和Firefox中正常工作,并成功匹配字符串:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>Test</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script type="text/javascript">
window.onload = function() {
var regex = /([a-zA-Z1-9]*)\.(((P|p)(D|d)(F|f))|((d|D)(o|O)(c|C)))/;
alert(regex.test('test.pdf'));
};
</script>
</head>
<body></body>
</html>
所以还有其他可能导致问题的因素。我建议你尝试尽可能地隔离问题,然后更容易找到解决方案。