【问题标题】:preg_match Delimiter errorpreg_match 分隔符错误
【发布时间】:2024-10-02 05:35:01
【问题描述】:

美好的一天, 我已经阅读了大约 25 篇关于添加“/”或“~”等作为分隔符的不同文章,但对这行代码无济于事。我尝试过的一切仍然给我一个分隔符错误。任何帮助将不胜感激。感谢您的时间。以下是引起我所有研究的原始代码。

$allowedHosts = array();

// self
$host = $_SERVER['HTTP_HOST'];
if( preg_match('\d+\.\d+\.\d+\.\d+', $host) ) {
    $allowedHosts[] = $host;
} else {
    $allowedHosts[] = '*.' . $host;
    $allowedHosts[] = $host;
}

【问题讨论】:

  • 什么是“分隔符错误”?您到底收到了什么错误消息?

标签: php preg-match delimiter


【解决方案1】:

您需要在正则表达式周围使用分隔符:

if( preg_match('/\d+\.\d+\.\d+\.\d+/', $host) ) {

在这种情况下,我使用了/,这是非常标准的。但你可以使用其他符号:

if( preg_match('@\d+\.\d+\.\d+\.\d+@', $host) ) {

delimiter 可以是任何非字母数字、非反斜杠、非空白字符。

我假设通过查看您的正则表达式,您正在尝试匹配 IP 地址,您可以尝试这样做:

$IP = "198.168.1.78";
if (preg_match('/^(([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]).){3}([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$/',$IP)) {
    echo "Your IP address is ok.";
} else {
    echo "Wrong IP address.";
}

【讨论】:

  • 供参考,Delimiters。 "分隔符可以是任何非字母数字、非反斜杠、非空白字符。"
  • 我尝试使用您描述的分隔符,但是,我仍然收到以下错误。2011-12-20T04:33:11+00:00 WARN (4): [2] preg_match():未知修饰符 '\' (/var/www/html/application/modules/Core/controllers/CrossDomainController.php)
  • 您应该转义第一组中的点。
【解决方案2】:

您似乎正在尝试验证 IP 地址。

PHP 有一个内置的...

$validIp = filter_var($host, FILTER_VALIDATE_IP);

【讨论】:

  • 我会在 php 中的什么地方应用这个?我是这种事情的菜鸟。
  • @MarkEllis:将条件的主体与上述减去赋值交换。
  • 这行得通。谢谢你。现在解决一个出现的单独问题,因为现在这是正确的。哈。感谢您的帮助!