编程语言
首页 > 编程语言> > ereg / eregi替换PHP 5.3

ereg / eregi替换PHP 5.3

作者:互联网

参见英文答案 > How can I convert ereg expressions to preg in PHP?                                    4个
我很抱歉提出一个问题,但在理解正则表达式代码时我没用.

在我没有编写的php模块中是以下函数

function isURL($url = NULL) {
    if($url==NULL) return false;

    $protocol = '(http://|https://)';
    $allowed = '([a-z0-9]([-a-z0-9]*[a-z0-9]+)?)';

    $regex = "^". $protocol . // must include the protocol
                     '(' . $allowed . '{1,63}\.)+'. // 1 or several sub domains with a max of 63 chars
                     '[a-z]' . '{2,6}'; // followed by a TLD
    if(eregi($regex, $url)==true) return true;
    else return false;
}

某种善意的灵魂可以用替换eregi所需的任何东西给我替换代码

解决方法:

好问题 – 升级到PHP 5.3时需要这样做,其中不推荐使用ereg和eregi函数.取代

eregi('pattern', $string, $matches) 

采用

preg_match('/pattern/i', $string, $matches)

(第一个参数中的尾随i表示忽略并且对应于eregi中的i – 只是在替换ereg调用时跳过).

但要注意新旧模式之间的差异! This page列出了主要的差异,但是对于更复杂的正则表达式,您必须更详细地查看POSIX regex(由旧的ereg / eregi / split函数等支持)和PCRE之间的差异.

但在您的示例中,您可以安全地使用以下命令替换eregi调用:

if (preg_match("%{$regex}%i", $url))
    return true;

(注意:%是分隔符;通常使用斜杠/.您要么确保分隔符不在正则表达式中,要么将其转义.在您的示例中,斜杠是$regex的一部分,因此使用不同更方便字符作为分隔符.)

标签:eregi,php,posix-ere
来源: https://codeday.me/bug/20190926/1822146.html