【发布时间】:2010-09-21 09:38:50
【问题描述】:
我越来越意识到,浏览器解释正则表达式的方式肯定存在重大差异。
例如,一位同事编写了这个正则表达式,以验证上传的文件是否具有 PDF 扩展名:
^(([a-zA-Z]:)|(\\{2}\w+)\$?)(\\(\w[\w].*))(.pdf)$
这适用于 Internet Explorer 和 Google Chrome,但不适用于 Firefox。测试总是失败,即使是实际的 PDF。所以我认为多余的东西无关紧要,并将其简化为:
^.+\.pdf$
现在它在 Firefox 中运行良好,并且在 IE 和 Chrome 中继续运行。
这是 ASP.NET 中的 asp:FileUpload 和 RegularExpressionValidator 控件特有的怪癖,还是仅仅是因为不同的浏览器以不同的方式支持正则表达式?无论哪种方式,您遇到过哪些后者?
【问题讨论】:
-
正则表达式所能控制的只是文件名以“.pdf”结尾(考虑到它似乎适用于 Windows,它可能需要不区分大小写)。它对文件的内容不做任何形式的保证——不要对差异感到困惑。病毒编写者依赖于此。
-
我觉得这与这个问题没有太大关系。我会冒昧地说“没有人”能够读/写正则表达式,愚蠢到认为文件扩展名可以验证内容。它所做的是帮助避免在上传时浪费服务器带宽、存储和周期,甚至没有命名正确的类型!
-
再一次,你很困惑......如果你想通过避免上传错误类型的文件来节省带宽,你必须在浏览器端验证......如果可能的话,这变得很难FF3,正如我所写。
标签: regex cross-browser consistency