Замена 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 '[az]' . '{2,6}'; // followed by a TLD if(eregi($regex, $url)==true) return true; else return false; } 

Может ли какая-то душа дать мне код замены для этого с тем, что требуется для замены eregi

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

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

использование

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

(конечный i в первом аргументе означает ignorecase и соответствует i в eregi – просто пропустите в случае замены вызова ereg ).

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

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

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

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

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

Вам нужна полная замена 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; } 

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.

🙂