【问题标题】:URL validation using eregi() but now with preg_matchURL 验证使用 eregi() 但现在使用 preg_match
【发布时间】:2013-08-28 12:42:53
【问题描述】:

eregi() 已弃用,需要替换为 preg_match。如何将以下语法转换为 preg_match?假设以下是 url,它是必需的正则表达式模式:

$url = "https://james.wordpress.com/2013/05/13/my-product-final";
$urlregex = "^(https?|ftp)\:\/\/([a-zåäöÅÄÖæÆøØ0-9+!*(),;?&=\$_.-]+(\:[a-zåäöÅÄÖæÆøØ0-9+!*(),;?&=\$_.-]+)?@)?[a-zåäöÅÄÖæÆøØ0-9+\$_-]+(\.[a-zåäöÅÄÖæÆøØ0-9+\$_-]+)*(\:[0-9]{2,5})?(\/([a-zåäöÅÄÖæÆøØ0-9+\$_-]\.?)+)*\/?(\?[a-z+&\$_.-][a-zåäöÅÄÖæÆøØ0-9;:@/&%=+\$_.-]*)?(#[a-z_.-][a-zåäöÅÄÖæÆøØ0-9+\$_.-]*)?\$";

以下代码可以正常工作:

if (eregi($urlregex, $url)) {
echo "Valid";
exit;
}

我尝试转换为“preg_match”,但无法正常工作:

if (preg_match("#$urlregex#i", $url)) {
echo "Valid";
exit;
}

也试过这样:

if (preg_match('/'.$urlregex.'/i', $url))

【问题讨论】:

  • 这个有效但不是 100%:if (preg_match("(".$urlregex.")i", $url))

标签: php preg-match eregi


【解决方案1】:

它不起作用,因为您用作分隔符的字符(即#)存在于正则表达式中。

你可以:

  • 转义正则表达式中的#\#
  • 将分隔符更改为正则表达式中不存在的字符

【讨论】:

    【解决方案2】:

    试试这个:-

    $url = "https://james.wordpress.com/2013/05/13/my-product-final";
    if (preg_match("/^(https?:\/\/+[\w\-]+\.[\w\-]+)/i",$url))
    {
    echo "Valid";
    exit;
    }
    

    filter_var()函数还可以验证字符串是否为URL

    【讨论】:

      【解决方案3】:
      $website = "http://googl.com";
      
      if (!preg_match("/\b(?:(?:https?|ftp):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|]/i",$website))
        {
        $websiteErr = "Invalid URL"; 
        }
      

      【讨论】:

      • 这不能回答问题。
      • 用户试图转换成 'preg_match' 但它不能工作,所以这个可以和他一起工作。
      猜你喜欢
      • 2018-11-29
      • 2016-09-06
      • 1970-01-01
      • 2012-02-09
      • 2018-07-14
      • 2019-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多