正则表达式适用于Firefox,但不适用于7.0

时间:2009-02-18 18:32:22

标签: asp.net regex

似乎使用asp.net正则表达式验证器存在一些问题,它们在firefox中工作,但在某些方面没有(即反之亦然,我不知道)。

无论如何,任何人都可以替换它:

([a-zA-Z1-9]*)\.(((P|p)(D|d)(F|f))|((d|D)(o|O)(c|C)))

基本上将任何文件名/路径与PDF或Doc扩展名匹配?

正如我所说,这在firefox下运行时工作正常,但不是7

编辑:我在这里谈论客户端验证。

3 个答案:

答案 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>

所以还有其他可能导致问题的因素。我建议你尝试尽可能地隔离问题,然后更容易找到解决方案。