pregmatch不按预期工作
问题描述:
为什么下面的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." =".'<font color="blue">Valid URL</font>';
}
else {
echo $url." =".'<font color="red">Invalid URL</font>';
}
}
$url = 'www.google.ca';
validateURL($url);
答
有几个原因不起作用。
- 当与
'
s一起附加变量时,不会评估变量。因此,'/^$regex$/'
将按照其写入的准确评估。 - 任何与
$
随附"
的将得到评估。因此,像$_
这样的东西将被替换为变量$_
的内容(如果存在)。 - 您需要在
$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";
'如果(的preg_match( “/^$正则表达式$ /”,$ URL))'...我碰到下面的错误,如果我这样做未知的修饰词“ /' – Anonymous 2012-03-21 04:18:38
你还没有逃过反斜杠。 – kba 2012-03-21 04:22:33
.kk我没有得到逃跑的错误了。但你确定验证的作品,我把'$ url =“wwjw..google.ca”'它说这是有效的 – Anonymous 2012-03-21 04:26:14