2013-08-28 104 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',但它不能工作,所以這個人會和他一起工作。 –