URL验证使用eregi(),但现在使用preg_match


URL validation using eregi() but now with preg_match

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))

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

您可以:

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

试试这个:-

$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

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