【问题标题】:Regex to validate URL - Not checking for HTTP?正则表达式验证 URL - 不检查 HTTP?
【发布时间】:2010-02-14 09:39:34
【问题描述】:

我知道这里有很多问题可以通过类似的方式验证网址

/^[a-zA-Z]+[:\/\/]+[A-Za-z0-9\-_]+\\.+[A-Za-z0-9\.\/%&=\?\-_]+$/i

唯一的问题是,不是每个人都使用http:// 或之前的任何东西,所以我想找到一种使用preg_match() 的方法,但不检查http 作为必须有而是更多a 并不重要,我将其修改为这个,但随后它拒绝了它 确实 包含 http:// 的 url:

/^[A-Za-z0-9\-_]+\\.+[A-Za-z0-9\.\/%&=\?\-_]+$/i

我希望更多地在这些条件下验证它

  • 如果它有 http:// 或 www 则忽略它
  • 如果 .extension 长于 9 则拒绝
  • 如果它包含no句号

谁有想法,谢谢:)

【问题讨论】:

    标签: php regex url validation


    【解决方案1】:

    你不能只使用内置的filter_var函数吗?

    filter_var('example.com', FILTER_VALIDATE_URL);
    

    不确定九个字符的扩展名限制,但我想您可以通过额外的步骤轻松检查。

    【讨论】:

    • filter_var 可以设置为过滤和是否需要该方案(http:// 部分,如果您不需要它,它将验证您是否有它)。人们喜欢重新发明轮子。他们通常把它做成方形。
    • @Erik。 PHP 似乎已经删除了 FILTER_FLAG_SCHEME_REQUIRED 常量 - 至少它不再在手册中......
    【解决方案2】:

    为什么不在正则表达式之前有一个阶段来简单地删除http://(如果存在)?这同样适用于www。这可能会让你的生活更轻松。

    【讨论】:

      【解决方案3】:
      /^(http\://|www\.)/
      
      /^.+?\.\S{0,9}\./
      
      /\./
      

      这些应该对你的要点有用吗?

      【讨论】:

        【解决方案4】:

        不是每个人都使用 http://

        他们应该。如果没有方案,它根本就不是 URL,省略它会导致奇怪的问题。例如:

        www.example.com:8080/file.txt
        

        这是一个有效的 URL,其架构不存在 www.example.com:

        如果您确定正常方案应该是 http:,您可以尝试在验证之前自动附加 http:// 以“修复”任何不以 https?: 开头的 URL。但从长远来看,您不应该允许/保留/返回无方案 URL。

        顺便说一下,根据官方 URI 语法(请参阅 RFC 3986),您正在使用的当前正则表达式距离准确还有很长的路要走。它将不允许许多有效的 URI 字符,更不用说 IRI 中的 Unicode 字符了。如果您想要正确的验证,您应该使用真正的 URL 解析器;如果你只是想快速检查明显的问题,你应该使用更宽松的东西。例如,只检查是否存在绝对无效的字符,如空格和"

        【讨论】:

          猜你喜欢
          • 2021-02-24
          • 1970-01-01
          • 2015-09-07
          • 2013-08-24
          • 2011-07-30
          • 1970-01-01
          • 2012-03-29
          • 2015-03-12
          相关资源
          最近更新 更多