//URL START
$urlregex = "^(https?|ftp)\:\/\/";
// USER AND PASS
$urlregex .= "([a-z0-9+!*(),;?&=\$_.-]+(\:[a-z0-9+!*(),;?&=\$_.-]+)?@)?";
// 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检查无效。我该怎么办?
答案 0 :(得分:2)
自PHP 5.3.0起,此功能已被弃用。非常不鼓励依赖此功能。
使用filter_var代替FILTER_VALIDATE_URL。或者,如果您坚持使用正则表达式,请使用preg_*
。
答案 1 :(得分:1)
我认为您的问题出在网址中,而不是正则表达式。我上次检查时,URL的路径部分中不允许使用星号。如果你真的需要一个星号,你应该逃避它:
http://www.example.com/about-me/my-4%2A-hotel/
答案 2 :(得分:0)
你可以改变你的正则表达式以允许星星......
$urlregex .= "(\/([a-z0-9+\$_*-].?)+)*\/?";