eregi中的星号

时间:2010-04-30 08:49:25

标签: php regex

//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检查无效。我该怎么办?

3 个答案:

答案 0 :(得分:2)

来自the documentation

  

自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+\$_*-].?)+)*\/?";