我越来越意识到,正则表达式将被浏览器解释的方式必定存在重大差异。
作为一个例子,一个同事写了这个正则表达式,以验证所上载的文件将有一个PDF扩展名:正则表达式:浏览器之间的差异
^(([a-zA-Z]:)|(\\{2}\w+)\$?)(\\(\w[\w].*))(.pdf)$
这个工作在Internet Explorer和谷歌浏览器,但不在Firefox中工作。测试总是失败,即使对于实际的PDF。所以我决定,多余的东西是不相关的,它简化为:
^.+\.pdf$
,现在,它在Firefox正常工作,以及继续在IE和Chrome的工作。
这是一个特定于asp:FileUpload和RegularExpressionValidator控件在ASP.NET中的怪癖,还是仅仅是由于不同的浏览器以不同的方式支持正则表达式?无论哪种方式,你遇到的后者有哪些?
正则表达式控制的所有东西都是文件名以'.pdf'结尾(并且可能需要不区分大小写,因为它似乎是Windows)。它不保证对文件的内容进行任何排序 - 不要混淆区别。病毒编写者依赖于此。 – 2008-11-08 01:06:34
我不认为这与问题有很大关系。我会肢体语言,并说能够读/写正则表达式的“无人”足够愚蠢,认为文件扩展名验证内容。它做的是帮助避免浪费服务器带宽,存储和上传周期,甚至没有命名为正确的类型! – Grank 2008-11-08 03:34:31
再一次,你很混淆......如果你想通过避免上传错误类型的文件来节省带宽,你必须在浏览器端进行验证......如果可能的话,在FF3中已经变得很难,就像我写的那样。 – PhiLho 2008-11-08 19:04:11