2013-08-28 70 views
3

eregi()已弃用,需要使用preg_match进行替换。我如何将以下语法转换为preg_match?假设以下是URL,它是必需的正则表达式:使用eregi()进行URL验证,但现在使用preg_match

$url = "https://james.wordpress.com/2013/05/13/my-product-final"; 
$urlregex = "^(https?|ftp)\:\/\/([a-zåäöÅÄÖæÆøØ0-9+!*(),;?&=\$_.-]+(\:[a-zåäöÅÄÖæÆøØ0-9+!*(),;?&=\$_.-]+)[email protected])?[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)) 
+0

这一个工作,但不100%:if(preg_match(“(”。$ urlregex。“)i”,$ url)) – Jerry3456

回答

1

因为炭你使用的分隔符(即它不工作。 #)存在于正则表达式中。

您可以:

  • 逃脱正则表达式的#\#
  • 变化的分隔符为char是不存在的正则表达式
1

试试这个: -

$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或不

0
$website = "http://googl.com"; 

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

这并不回答这个问题。 – Toto

+0

用户试图转换成'preg_match',但它不能工作,所以这个人会和他一起工作。 –