2012-03-31 22 views
14

Lamento hacer una pregunta pero soy inútil cuando se trata de entender el código de expresiones regulares.ereg/eregi reemplazo para PHP 5.3

En un módulo php que no he escrito es la siguiente función

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

¿Puede alguna alma caritativa me dan el código de reemplazo para que, con todo lo que se requiere para reemplazar el eregi

+0

Cuál es el propósito de reemplazarlo? –

+3

@William, funciones como 'ereg',' eregi', 'split', etc. están en desuso (no solo desaprobado, sino completamente eliminado) a partir de PHP 5.3. [Leer más] (http://www.php.net/manual/en/reference.pcre.pattern.posix.php). – TMS

+0

¿Reemplazo completo? http://stackoverflow.com/questions/9954064/ereg-eregi-replacement/9954148#9954148 –

Respuesta

39

Buena pregunta - esto es necesario cuando se actualiza a PHP 5.3, donde están en desuso y eregeregi funciones. Para reemplazar

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

uso

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

(detrás del i en el primer argumento significa ignorecase y corresponde a la i en eregi - acaba de saltar en caso de sustitución de ereg llamada).

¡Pero tenga en cuenta las diferencias entre los patrones nuevos y antiguos! This page enumera las diferencias principales, pero para las expresiones regulares más complicadas, debe buscar con más detalle las diferencias entre POSIX regex (compatible con las funciones antiguas ereg/eregi/split, etc.) y PCRE.

Pero en su ejemplo, se le acaba segura para reemplazar la llamada eregi con:

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

(nota: la % es un delimitador, normalmente slash se utiliza / Tienes ya sea para asegurar que el delimitador. no está en la expresión regular ni lo escapa. En las barras de ejemplo, usted forma parte de $ regex, por lo que es más conveniente utilizar caracteres diferentes como delimitador).

+1

muchas gracias Tomás eres una estrella. – Colin

+0

lo siento Tomas su solución da un error preg_match() [function.preg-match]: modificador desconocido 'h' es que está causada por la i después de la} – Colin

+0

@Colin, vale, ya veo! Esto se debe a que el delimitador '|' se usa también en $ regex ... así que tenemos que usar un delimitador diferente, que no está presente en $ regex, p. Ej. '%' (espero no haber pasado por alto algo de nuevo :-)). Actualizado mi respuesta. – TMS

0

eregi es depreciado en PHP usted tiene que utilizar 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" ; 
} 

favor ver http://php.net/manual/en/function.preg-match.php para más informaciónGracias

:)

+0

Su regex de reemplazo no aplica las mismas reglas – meouw

+0

ey votante ... ¿le importa dar razones por las cuales estaba abajo volado ??? – Baba

+0

@meouw ... la regla es verificar la dirección de correo electrónico válida ... me falta algo – Baba

1

¿Desea un reemplazo completo para preg_match y eregi?

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

O por correo electrónico:

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

paliativos PHP 5.3 hasta que se sustituya todas las funciones obsoletas

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); } } 
Cuestiones relacionadas