gpt4 book ai didi

regex - 正则表达式 : Differences between browsers

转载 作者:行者123 更新时间:2023-12-05 09:00:35 26 4
gpt4 key购买 nike

我越来越意识到,浏览器解释正则表达式的方式肯定存在重大差异。
例如,一位同事编写了这个正则表达式,以验证正在上传的文件是否具有 PDF 扩展名:

^(([a-zA-Z]:)|(\\{2}\w+)\$?)(\\(\w[\w].*))(.pdf)$

这适用于 Internet Explorer 和 Google Chrome,但不适用于 Firefox。测试总是失败,即使对于实际的 PDF 也是如此。所以我决定多余的东西是无关紧要的,并将其简化为:

^.+\.pdf$

现在它在 Firefox 中运行良好,并继续在 IE 和 Chrome 中运行。
这是 ASP.NET 中的 asp:FileUpload 和 RegularExpressionValidator 控件特有的怪癖,还是仅仅是因为不同的浏览器以不同的方式支持正则表达式?无论哪种方式,您遇到过哪些后者?

最佳答案

关于实际问题:原始正则表达式要求值以驱动器号或 UNC 设备名称开头。 Firefox 很可能根本不将其包含在文件名中。另请注意,如果您打算跨平台,则无论浏览器如何,该正则表达式在任何非 Windows 系统上都会失败,因为它们不使用驱动器号或 UNC 路径。您的简化正则表达式(“接受任何内容,只要它以 .pdf 结尾”)与您将要获得的文件名检查差不多。

但是,Jonathan 对原始问题的评论怎么强调都不为过。永远,永远,永远 相信文件名是确定其内容的充分手段。或者 MIME 类型,就此而言。与您的 Web 服务器(甚至可能不是浏览器)通信的客户端软件可能会在任何事情上对您撒谎,除非您对其进行验证,否则您永远不会知道。在这种情况下,这意味着将接收到的文件输入一些理解 PDF 格式的代码,并让该代码告诉您它是否是有效的 PDF。检查文件名可能有助于防止人们尝试提交明显不正确的文件,但这不足以对收到的文件进行测试。

(我知道您可能知道需要额外验证,但下一个遇到类似情况并发现您问题的人可能不知道。)

关于regex - 正则表达式 : Differences between browsers,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/274024/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com