2010-04-30 88 views
0
//URL START 
$urlregex = "^(https?|ftp)\:\/\/"; 
// USER AND PASS 
$urlregex .= "([a-z0-9+!*(),;?&=\$_.-]+(\:[a-z0-9+!*(),;?&=\$_.-]+)[email protected])?"; 
// HOSTNAME OR IP 
$urlregex .= "[a-z0-9+\$_-]+(\.[a-z0-9+\$_-]+)*"; 
// PORT 
$urlregex .= "(\:[0-9]{2,5})?"; 
// PATH 
$urlregex .= "(\/([a-z0-9+\$_-]\.?)+)*\/?"; 
// GET Query 
$urlregex .= "(\?[a-z+&\$_.-][a-z0-9;:@/&%=+\$_.-]*)?"; 
// ANCHOR 
$urlregex .= "(#[a-z_.-][a-z0-9+\$_.-]*)?\$"; 
// check 
if (eregi($urlregex, $url)) {echo "good";} else {echo "bad";} 

但如果我有http://www.example.com/about-me/my-4*-hotel/星號eregi

這eregi檢查是因爲星號的無效的。我該怎麼辦?

回答

2

the documentation

此功能已被棄用的PHP 5.3.0的。依靠這個功能是非常不鼓勵的。

改爲使用帶有FILTER_VALIDATE_URL的filter_var。或者如果你堅持使用正則表達式,然後使用preg_*

+0

非常感謝!那工作:) – 2010-05-03 09:24:14

0

你可以改變你的正則表達式,讓星星......

$urlregex .= "(\/([a-z0-9+\$_*-].?)+)*\/?"; 
+0

不知道爲什麼,但它不工作,我已經試過了更早 – 2010-04-30 09:00:26

+0

@Mihai:我有一個錯誤在我的正則表達式,也許你已經也是如此。如果不是班級中的第一個或最後一個字符,'-'具有特殊含義。糾正。 – Jens 2010-04-30 09:35:14

1

我認爲你的問題是在URL中,而不是正則表達式。上次我檢查時,在URL的路徑部分中不允許使用星號。如果你真的需要一個星號出現,你應該逃避它:

http://www.example.com/about-me/my-4%2A-hotel/ 
+0

我知道有一個問題,但有了這個項目的老傢伙用這些URL做了一些愚蠢的事情,直到我將重寫URL重寫,我必須裸露他的代碼。星號在URL中非常重要。 – 2010-05-03 09:26:33