Замена 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
Ответы
Ответ 1
Хороший вопрос - это необходимо при обновлении до PHP 5.3, где функции ereg
и eregi
устарели. Чтобы заменить
eregi('pattern', $string, $matches)
использовать
preg_match('/pattern/i', $string, $matches)
(конечный i
в первом аргументе означает ignorecase и соответствует i
in eregi
- просто пропустите в случае замены вызова ereg
).
Но помните о различиях между новыми и старыми шаблонами! На этой странице перечислены основные отличия, но для более сложных регулярных выражений вам нужно более подробно изучить различия между POSIX regex (поддерживается старыми функциями ereg/eregi/split и т.д.) и PCRE.
Но в вашем примере вы просто можете заменить вызов eregi следующим образом:
if (preg_match("%{$regex}%i", $url))
return true;
(примечание: %
является разделителем, обычно используется косая черта /
. Вы должны либо убедиться, что разделитель не находится в регулярном выражении, либо избегает его. В вашем примере черточки являются частью $regex, поэтому удобнее использовать другой символ в качестве разделителя.)
Ответ 2
Паллиативный 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); } }
Ответ 3
Вам нужна полная замена 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;
}
Ответ 4
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
Благодаря
:)