Php 检查主机名是否与preg_匹配

Php 检查主机名是否与preg_匹配,php,regex,Php,Regex,我在使用preg_match时遇到问题。(我对正则表达式非常陌生) 总是返回false,不应该返回。我错在哪里 更新 大家好!谢谢大家的帮助!现在每个检查都可以了应该是'/^http:\/\/myWebsite\.com\//i'(注意插入符号(^)的位置,i表示不区分大小写的匹配)预匹配需要有效的分隔符。它可能会抛出一个你没有看到的警告。你应该把克拉放在开口后 还可以尝试错误报告(E_ALL)以查看任何警告等 return (boolean) preg_match('#^http://myWe

我在使用preg_match时遇到问题。(我对正则表达式非常陌生)

总是返回false,不应该返回。我错在哪里

更新


大家好!谢谢大家的帮助!现在每个检查都可以了

应该是
'/^http:\/\/myWebsite\.com\//i'
(注意插入符号(^)的位置,i表示不区分大小写的匹配)

预匹配需要有效的分隔符。它可能会抛出一个你没有看到的警告。你应该把克拉放在开口后

还可以尝试
错误报告(E_ALL)以查看任何警告等

return (boolean) preg_match('#^http://myWebsite\.com/#i', $_SERVER['HTTP_REFERER']);
您可以选择自己的分隔符,使事情更简单。这里我选择了
#

我还在末尾添加了一个
I
修饰符,使搜索不区分大小写


我删除了if/else分支,只返回了
preg_match
(类型转换为布尔值)的结果。

您的正则表达式缺少分隔符,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以显示错误。这样您将看到:
    警告:preg_match():无结束分隔符
    1)为什么不查看可用的模式,2)不使用不区分大小写的匹配。3) 分隔符4)引用者是否总是http、https?可能更适合使用*+1。我发现我很少在正则表达式中使用它们,因此没有必要逃避,它们从正则表达式的其他部分的刺状外观中脱颖而出。非常感谢您花时间帮助我!i参数非常方便!非常感谢。非常感谢你抽出时间来帮助我!现在一切都很顺利!再次感谢。
    <?php
    
    error_reporting(E_ALL | E_STRICT);
    ini_set('display_errors', TRUE);
    
    # Print E_ALL | E_STRICT from a PHP script to get the appropriate number:
    php_value error_reporting 2147483647
    php_flag display_errors on