2010-04-30 21 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