замена ereg/eregi для PHP 5.3


Извините, что задаю вопрос, но я бесполезен, когда дело доходит до понимания кода регулярных выражений.

В модуле 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

Author: hakre, 2012-03-31

4 answers

Хороший вопрос - это необходимо при обновлении до PHP 5.3, где функции ereg и eregi устарели. Чтобы заменить

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

Использовать

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

(завершающий i в первом аргументе означает игнорирование и соответствует i в eregi - просто пропустите в случае замены вызова ereg).

Но имейте в виду различия между новыми и старыми моделями! На этой странице перечислены основные различия, но для более сложных регулярных выражений вы необходимо более подробно рассмотреть различия между регулярным выражением POSIX (поддерживаемым старыми функциями ereg/eregi/split и т. Д.) И PCRE.

Но в вашем примере вы можете просто заменить вызов eregi на:

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

(примечание: % является разделителем; обычно используется косая черта /. Вы должны либо убедиться, что разделитель отсутствует в регулярном выражении, либо избежать его. В вашем примере косые черты являются частью регулярного выражения $, поэтому удобнее использовать разные символ в качестве разделителя.)

 41
Author: TMS, 2012-03-31 09:16:22

Паллиативный 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); } }
 6
Author: Roger Wolff, 2016-08-22 16:40:58

Вы хотели полную замену 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
Author: William Isted, 2012-03-31 08:06:54

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
Author: Baba, 2012-03-31 07:51:18