使用preg_match时出现问题。 (我对正则表达式很陌生)使用preg_match检查主机名称
if(preg_match('^/http:\/\/myWebsite\.com\/', $_SERVER['HTTP_REFERER'])) {
return true;
}
else{
return false;
}
总是返回false,它不应该。我错在哪里?
UPDATE
大家好!感谢你们所有人的帮助!每个检查是好的,现在
使用preg_match时出现问题。 (我对正则表达式很陌生)使用preg_match检查主机名称
if(preg_match('^/http:\/\/myWebsite\.com\/', $_SERVER['HTTP_REFERER'])) {
return true;
}
else{
return false;
}
总是返回false,它不应该。我错在哪里?
UPDATE
大家好!感谢你们所有人的帮助!每个检查是好的,现在
你的正则表达式中缺少分隔符,因为PHP应该警告你:
$_SERVER['HTTP_REFERER'] = 'http://myWebsite.com/foo.html';
var_dump(preg_match('^/http:\/\/myWebsite\.com\/', $_SERVER['HTTP_REFERER']));
...触发:
结束警告:的preg_match():无定界符
由于您可以选择自己的分隔符,因此选择不在文本中的分隔符会更简单:
preg_match('@^http://myWebsite\.com/@', $_SERVER['HTTP_REFERER'])
此外,如果文本没有固定的(不是这个情况下,我相信),PHP能够逃脱它为您提供:
preg_match('/^' . preg_quote('http://myWebsite.com/', '/') . '/', $_SERVER['HTTP_REFERER'])
我建议你配置开发框来显示所有可能的错误。您有几种方法可以这样做:
编辑您的php.ini
文件:
error_reporting = E_ALL | E_STRICT
display_errors = On
将这个对你的脚本的顶部:
<?php
error_reporting(E_ALL | E_STRICT);
ini_set('display_errors', TRUE);
如果PHP运行作为Apache模块,您还可以使用.htaccess
文件:
# Print E_ALL | E_STRICT from a PHP script to get the appropriate number:
php_value error_reporting 2147483647
php_flag display_errors on
非常感谢您花时间帮助我!现在一切顺利!再次感谢。 – matteo 2012-01-19 17:48:09
它应该是'/^http:\/\/myWebsite\.com\//i'
(注意插入符号(^)位置,并为不区分大小写匹配的我)
非常感谢您的提示。 – matteo 2012-01-19 17:50:14
的preg_match需要有效的分隔符。它可能会引发你没有看到的警告。你应该在开幕式之后放置克拉^。
也可以尝试error_reporting(E_ALL);
看到任何警告等
非常感谢您的提示。 – matteo 2012-01-19 17:50:03
return (boolean) preg_match('#^http://myWebsite\.com/#i', $_SERVER['HTTP_REFERER']);
你可以选择你自己的分隔符,使事情变得更容易。这里我选择了#
。
我还在末尾添加了一个i
修饰符,以使搜索不区分大小写。
我删除了if/else分支,并且仅返回了preg_match
(类型为布尔型)的结果。
使用#的+1。我发现我很少在正则表达式中使用它们,因此不需要逃脱,它们从正则表达式的其余部分的棘手尖峰的外观中脱颖而出。 – 2012-01-16 17:04:45
非常感谢您花时间帮助我!我的参数非常方便!非常感谢。 – matteo 2012-01-19 17:48:49
不客气。 – webbiedave 2012-01-19 18:06:08
您需要配置PHP以显示错误。这样你会看到:'警告:preg_match():无结束分隔符“ – 2012-01-16 16:59:21
1)为什么不看可用模式,2)不使用不区分大小写的匹配。 3)分隔符4)引用者总是http,https?可能更适合 – Layke 2012-01-16 16:59:39
* [将ereg转换为preg(缺少正则表达式分隔符)](http://stackoverflow.com/questions/6270004/converting-ereg-expressions-to-preg) – mario 2012-01-16 16:59:50