代码之家  ›  专栏  ›  技术社区  ›  E.J. Brennan

regexs在firefox中有效,但在7.0中无效。

  •  0
  • E.J. Brennan  · 技术社区  · 16 年前

    似乎在使用ASP.NET正则表达式验证器的时候遇到了一些问题,它们在Firefox中工作,但在某些版本中却不工作,例如(也许相反,我不知道)。

    不管怎样,任何人都可以替换:

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

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

    如我所说,当在火狐下运行时,这很好,但不是7

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

    3 回复  |  直到 16 年前
        1
  •  0
  •   Grant Wagner    16 年前
    <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>
    

    你能提供一个在IE7中不起作用但在火狐中起作用的测试用例吗?

    你可以把这些都换掉 or 带着 /([a-zA-Z1-9]*)\.(([Pp][Dd][Ff])|([dD][oO][cC]))/ /([a-z1-9]*)\.((pdf)|(doc))/i .

    如果这应该与 <input type="file"> ,Internet Explorer可能包含路径,而Firefox不包含路径(我知道它在服务器上,也可能在客户机上)。

    好的建议是实际检查您试图与正则表达式匹配的值,以确保它是您认为的值。

        2
  •  2
  •   James Socol    16 年前

    你的表达不是很宽容:

     ([a-zA-Z1-9]*)
    

    不相匹配 MyPDF-0.pdf 或者更重要的是, C:\Path\To\Doc.pdf . 检查表单输入,查看是否有完整的文件路径或文件名。

    编辑 :

    试试这个:

    \.([Pp][Dd][Ff]|[Dd][Oo][Cc][Xx]?)$
    

    除非你能让它不区分大小写,比如在javascript中:

    /\.(pdf|docx?)$/i
    
        3
  •  0
  •   Darin Dimitrov    16 年前

    您的正则表达式没有任何问题(除了您可以根据其他人的建议进行一些优化)。以下代码在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>
    

    所以还有其他可能引起这个问题的因素。我建议你尽可能地把问题孤立起来,这样解决办法就会更容易找到。