5

関数 eregi() は非推奨です。eregi() を置き換えるにはどうすればよいですか。preg_match を試してみましたが、動作しなくなりました。

私はこのヘルプを使用します:

http://takien.com/513/how-to-fix-function-eregi-is-deprecated-in-php-5-3-0.php

前のコード:

if ( ! eregi("convert$", $this->library_path))
        {
            if ( ! eregi("/$", $this->library_path)) $this->library_path .= "/";

            $this->library_path .= 'convert';
        }

if (eregi("gd2$", $protocol))
        {
            $protocol = 'image_process_gd';
        }

コード:

if ( ! preg_match("convert$/i", $this->library_path))
        {
            if ( ! preg_match("/$/i", $this->library_path)) $this->library_path .= "/";

            $this->library_path .= 'convert';
        }

if (preg_match("gd2$/i", $protocol))
        {
            $protocol = 'image_process_gd';
        }
4

3 に答える 3

8

preg_matchは、その正規表現引数が区切り文字のペア内にあることを期待しています。

だから試してください:

if ( ! preg_match("#convert$#i", $this->library_path)) {
        if ( ! preg_match("#/$#i", $this->library_path)) 
                $this->library_path .= "/";

        $this->library_path .= 'convert';
}

if (preg_match("#gd2$#i", $protocol)) {                                         
        $protocol = 'image_process_gd'; 
}     
于 2011-04-18T09:22:34.917 に答える
2

デリミタを忘れたようです

preg_match("~/$~", $this->library_path)

preg_match("~gd2$~i", $protocol)

ただし、どちらの場合も、ここでは大きすぎるため、正規表現を使用しないことを検討する必要があります。

$this->library_path[strlen($this->library_path) - 1] == '/'
substr($protocol, -3) == 'gd2'
于 2011-04-18T09:20:51.687 に答える
1

ある文字列が別の文字列内に存在することを確認するだけの場合は、strpos()関数を使用する必要があります。例えば:

if(strpos('convert', $this->library_path) !== false) {
    // code here
}

更新:文字列の END でそれをチェックしたいと誤解していますsubstr()

if(substr($this->library_path, -7) == 'convert'  {
    //code here
}

convert の長さはどこですか7。strlen を使用して 0 から減算すると、この数値を動的に取得できます。これは正規表現を開始しないため、はるかに効率的です。

于 2011-04-18T09:39:02.487 に答える