2012-03-21 174 views
0

为什么下面的url验证会给我错误。如果我把url = www.google.ca,它给了我一个错误的网址。pregmatch不按预期工作

function validateURL($url){ 
$regex = "((https?|ftp)://)?"; 
$regex .= "([a-z0-9+!*(),;?&=$_.-]+(:[a-z0-9+!*(),;?&=$_.-]+)[email protected])?"; 
$regex .= "([a-z0-9-.]*).([a-z]{2,3})"; 
$regex .= "(:[0-9]{2,5})?"; 
$regex .= "(/([a-z0-9+$_-].?)+)*/?"; 
$regex .= "(?[a-z+&$_.-][a-z0-9;:@&%=+/$_.-]*)?"; 
$regex .= "(#[a-z_.-][a-z0-9+$_.-]*)?"; 
if(preg_match('/^$regex$/', $url)) 
{ 
echo $url."&nbsp;&nbsp;&nbsp;=".'<font color="blue">Valid URL</font>'; 
} 
else { 
echo $url."&nbsp;&nbsp;&nbsp;=".'<font color="red">Invalid URL</font>'; 
} 
} 

$url = 'www.google.ca'; 

validateURL($url); 

回答

0

有几个原因不起作用。

  1. 当与' s一起附加变量时,不会评估变量。因此,'/^$regex$/'将按照其写入的准确评估。
  2. 任何与$随附"的将得到评估。因此,像$_这样的东西将被替换为变量$_的内容(如果存在)。
  3. 您需要在$regex变量中跳过反斜杠和问号。

这将工作:

function validateURL($url) { 
    $regex = '((https?|ftp):\/\/)?'; 
    $regex .= '([a-z0-9+!*(),;?&=$_.-]+(:[a-z0-9+!*(),;?&=$_.-]+)[email protected])?'; 
    $regex .= '([a-z0-9-.]*).([a-z]{2,3})'; 
    $regex .= '(:[0-9]{2,5})?'; 
    $regex .= '(\/([a-z0-9+$_-].?)+)*\/?'; 
    $regex .= '(\?[a-z+&$_.-][a-z0-9;:@&%=+\/$_.-]*)?'; 
    $regex .= '(#[a-z_.-][a-z0-9+$_.-]*)?'; 
    return preg_match("/^{$regex}$/", $url) > 0; 
} 

$url = 'www.google.ca'; 

if (validateURL($url)) 
    print "$url is valid\n"; 
else 
    print "$url is invalid\n"; 
+0

'如果(的preg_match( “/^$正则表达式$ /”,$ URL))'...我碰到下面的错误,如果我这样做未知的修饰词“ /' – Anonymous 2012-03-21 04:18:38

+0

你还没有逃过反斜杠。 – kba 2012-03-21 04:22:33

+0

.kk我没有得到逃跑的错误了。但你确定验证的作品,我把'$ url =“wwjw..google.ca”'它说这是有效的 – Anonymous 2012-03-21 04:26:14