19

質問して申し訳ありませんが、正規表現コードの理解に関しては役に立ちません。

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

エレギを置き換えるために必要なものは何でも、親切な魂が私にその代わりのコードを与えることができますか

4

4 に答える 4

47

ereg良い質問です - これは PHP 5.3にアップグレードするときに必要eregiです。交換する

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

使用する

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

(i最初の引数の末尾は ignorecase を意味し、iinに対応しますeregi- 呼び出しを置換する場合はスキップしeregます)。

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

しかし、あなたの例では、 eregi 呼び出しを次のように置き換えても安全です。

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

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

于 2012-03-31T07:54:24.490 に答える
12

非推奨の関数をすべて置き換えるまで、緩和的な 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); } }
于 2014-03-15T06:26:49.050 に答える
1

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;
}
于 2012-03-31T08:00:11.247 に答える
0

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を参照してください。

:)

于 2012-03-31T07:51:18.907 に答える