2012-03-31 3 views
14

Извините, что задал вопрос, но я бесполезен, когда дело доходит до понимания кода регулярного выражения.ereg/eregi replacement for 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

+0

Какова цель заменить его? –

+3

@William, функции типа 'ereg',' eregi', 'split' и т. Д. Устарели (не только устарели, но полностью удалены), как и PHP 5.3. [Читать дальше] (http://www.php.net/manual/en/reference.pcre.pattern.posix.php). – TMS

+0

Замена вообще? http://stackoverflow.com/questions/9954064/ereg-eregi-replacement/9954148#9954148 –

ответ

39

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

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

Используйте

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

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

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

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

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

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

+1

большое спасибо Томас, ты звезда. – Colin

+0

извините Tomas ваше решение дает ошибку preg_match() [function.preg-match]: Неизвестный модификатор 'h' - это то, что вызвано i после того, как} – Colin

+0

@Colin, ок, я вижу! Это связано с тем, что разделитель '|' также используется в $ regex ... поэтому нам нужно использовать другой разделитель, которого нет в $ regex, например. '%' (надеюсь, что я еще ничего не забыл :-)). Обновлен мой ответ. – TMS

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 для получения дополнительной информации Благодаря

:)

+0

Ваше регулярное выражение не применяет те же правила – meouw

+0

hey down voter .. вы можете указать причины, по которым я был понижен? – Baba

+0

@meouw ... правилом является проверка правильного адреса электронной почты ... я что-то не хватает – Baba

1

Вы хотите полную замену preg_match и eregi?

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

Или Email:

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

Паллиативная 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); } }