【问题标题】:Forcing a URL field to not have "http://www." using regex强制 URL 字段不包含“http://www”。使用正则表达式
【发布时间】:2015-03-30 15:53:34
【问题描述】:

我需要验证一个输入字段的 URL 字段,该字段处理一个挑剔的 API,该 API 将接受非常特定格式的 URL 字符串 - 没有 www 和 http 附加到字符串的开头,否则它会中断。 javascript 处理程序从validation.php 文件中获取数据。除了一个字段,我什么都可以工作。


所以,例如我想要

example.com/example

example.com

通过验证,但我想要

http://example.com/example

http://www.example.com/example

以及任何变体,包括 http:// 或 www 的任何派生。不验证。


我下面的正则表达式目前允许任何类型的 URL,包括 http 和 www。我希望它只允许上述类型的 URL 字符串,但不知道该怎么做。

    // API URL VALIDATION
    if ($formfield == "api_url") {
        if (!preg_match("/\b(?:(?:https?|ftp):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|]/i", $value)) {
            echo "Please enter your URL without the http://www part attached" 
        } else {
            echo "<span>Valid</span>";
        }

}

有什么想法吗?

【问题讨论】:

  • 所以删除 reg exp 的第一部分或删除代码中不需要的部分。只需砍掉不需要的部分并重置文本框的值。

标签: javascript php regex validation


【解决方案1】:

您可以在preg_match 中使用这个基于负前瞻的简单正则表达式:

~^(?!https?://)(?!www\.).+$~i

RegEx Demo

【讨论】:

    【解决方案2】:

    您可以尝试“不匹配”以 http 或 www 开头的主题:

    if(!preg_match('/^((http|ftp)s?:\/\/)?(www\.).+?/', $value))
    

    【讨论】:

      【解决方案3】:

      您可以使用 .htaccess mod rewrite 规则来做到这一点。但是在您的情况下,您似乎需要验证输入字段,因此它不适用于所有情况。这是在 url 中允许/禁止此类协议的函数。

      function remove_protocol($url) {
         $filter_protocol = array('http://', 'https://', 'http://www');
         foreach($filter_protocol as $d) {
            if(strpos($url, $d) === 0) {
               return str_replace($d, '', $url);
            }
         }
         return $url;
      }
      

      $filter_protocol 数组中,您可以继续定义不允许在 url 中出现的协议,例如 ftp://

      【讨论】:

        猜你喜欢
        • 2021-01-06
        • 2014-05-07
        • 1970-01-01
        • 1970-01-01
        • 2016-04-23
        • 2013-06-18
        • 2010-10-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多