web-dev-qa-db-ja.com

PHP 5.3のereg / eregi置換

質問をして申し訳ありませんが、正規表現のコードを理解するのは無意味です。

私が書いていない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;
}

ある種の魂が私にそのための代替コードを与えてくれます

17
Colin

良い質問です。これは、PHP 5.3にアップグレードするときに必要です。ここで、eregおよびeregi関数は非推奨です。

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

使用する

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

(最初の引数の末尾のiは無視ケースを意味し、ieregiに対応します-ereg呼び出しを置き換える場合はスキップしてください)。

ただし、新旧のパターンの違いに注意してください。 このページ は主な違いをリストしますが、より複雑な正規表現については POSIX regex 間の違いをより詳細に調べる必要があります(古いereg/eregi/splitでサポートされています)関数など)および [〜#〜] pcre [〜#〜]

しかし、あなたの例では、あなたはeregi呼び出しを次のものに置き換えるだけで安全です:

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

(注:%は区切り文字です。通常はスラッシュ/ 使用されている。区切り文字が正規表現に含まれていないことを確認するか、エスケープする必要があります。例では、スラッシュは$ regexの一部であるため、区切り文字として別​​の文字を使用する方が便利です。)

45
TMS

緩和PHP 5.3廃止されたすべての関数を置き換えるまで

if(!function_exists('ereg'))            { function ereg($pattern, $subject, &$matches = []) { return preg_match('/'.$pattern.'/', $subject, $matches); } }
if(!function_exists('eregi'))           { function eregi($pattern, $subject, &$matches = []) { return preg_match('/'.$pattern.'/i', $subject, $matches); } }
if(!function_exists('ereg_replace'))    { function ereg_replace($pattern, $replacement, $string) { return preg_replace('/'.$pattern.'/', $replacement, $string); } }
if(!function_exists('eregi_replace'))   { function eregi_replace($pattern, $replacement, $string) { return preg_replace('/'.$pattern.'/i', $replacement, $string); } }
if(!function_exists('split'))           { function split($pattern, $subject, $limit = -1) { return preg_split('/'.$pattern.'/', $subject, $limit); } }
if(!function_exists('spliti'))          { function spliti($pattern, $subject, $limit = -1) { return preg_split('/'.$pattern.'/i', $subject, $limit); } }
11
Roger Wolff

Preg_matchとeregiを完全に置き換えたいですか?

if(!filter_var($URI, FILTER_VALIDATE_URL))
{ 
return false;
} else {
return true;
}

またはメールの場合:

if(!filter_var($EMAIL, FILTER_VALIDATE_EMAIL))
{ 
return false;
} else {
return true;
}
1
William Isted

eregiはPHPで非推奨になりましたpreg_matchを使用する必要があります

function isValidURL($url)
{
    return preg_match('%^((https?://)|(www\.))([a-z0-9-].?)+(:[0-9]+)?(/.*)?$%i', $url);
}


if(isValidURL("http://google.com"))
{
    echo "Good URL" ;
}
else
{
    echo "Bad Url" ;
}

詳しくは http://php.net/manual/en/function.preg-match.php をご覧ください。ありがとう

:)

0
Baba