preg_match没有按预期工作

时间:2012-03-21 04:07:09

标签: php validation url preg-match

为什么以下网址验证会给我错误。如果我把url = www.google.ca,它会给我一个错误的网址。

function validateURL($url){
$regex = "((https?|ftp)://)?";  
$regex .= "([a-z0-9+!*(),;?&=$_.-]+(:[a-z0-9+!*(),;?&=$_.-]+)?@)?"; 
$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);

1 个答案:

答案 0 :(得分:0)

为什么这不起作用有几个原因。

  1. 使用'括起来时,不会评估变量。因此,'/^$regex$/'将完全按照其编写的方式进行评估。
  2. 任何带有$的{​​{1}}的内容都会被评估。因此,"之类的内容将替换为变量$_的内容(如果存在)。
  3. 您需要在$_变量中转义反斜杠和问号。
  4. 这将有效:

    $regex