web-dev-qa-db-fra.com

Remplacement ereg / eregi pour PHP 5.3

Je suis désolé de poser une question mais je suis inutile quand il s'agit de comprendre le code regex.

Dans un module php que je n'ai pas écrit est la fonction suivante

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;
}

Une âme aimable peut-elle me donner le code de remplacement pour tout ce qui est nécessaire pour remplacer l'eregi

17
Colin

Bonne question - cela est nécessaire lorsque vous effectuez une mise à niveau vers PHP 5.3, où les fonctions ereg et eregi sont obsolètes. Pour remplacer

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

utilisation

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

(le i de fin dans le premier argument signifie ignorecase et correspond au i dans eregi - il suffit de sauter en cas de remplacement de l'appel de ereg).

Mais soyez conscient des différences entre les nouveaux et les anciens modèles! Cette page répertorie les principales différences, mais pour les expressions régulières plus compliquées, vous devez examiner plus en détail les différences entre expression régulière POSIX (pris en charge par l'ancien ereg/eregi/split etc.) et PCRE .

Mais dans votre exemple, vous pouvez simplement remplacer l'appel eregi par:

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

(noter la % est un délimiteur; barre oblique normale / est utilisé. Vous devez soit vous assurer que le délimiteur n'est pas dans l'expression régulière, soit y échapper. Dans votre exemple, les barres obliques font partie de l'expression régulière $ regex, il est donc plus pratique d'utiliser un caractère différent comme délimiteur.)

45
TMS

Palliative PHP 5.3 jusqu'à ce que vous remplaciez toutes les fonctions obsolètes

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); } }
11
Roger Wolff

Vouliez-vous un remplacement complet de preg_match et eregi?

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

Ou pour l'email:

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

eregi est déconseillé dans PHP vous devez utiliser 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" ;
}

Veuillez voir http://php.net/manual/en/function.preg-match.php pour plus d'informations Merci

:)

0
Baba