Publicado por: 18

La funcion ‘eregi‘ está obsoleta desde PHP 5.3.

Ahora debemos usar la función ‘preg_match‘ que es compatible con ‘Perl‘.

Para la sustitución, tenemos que tener en cuanta lo siguiente:

1. Es necesario añadir delimitadores a la expresión regular.
2. Algunas expresiones las tendremos que cambiar por sus equivalentes en PCRE (Perl Compatible Regular Expressions).
3. La ‘i’ de ‘eregi’ viene de case-insensitive, que en PCRE equivale a usar el flag ‘i’.

Sabiendo esto, vamos a un caso práctico:

Utilizando Joomla 1.5 con el editor JCE, nos podemos encontrar con el siguiente error:

Deprecated: Function eregi() is deprecated in XXX\plugins\editors\jce\libraries\classes\editor.php on line 236

En este caso, solo tenemos que ir a la línea en cuestión, y cambiar el código:

if( eregi( $key, $param ) ){

Por

if( preg_match( '/'.$key.'/i', $param ) ){

Esperamos que os sea de ayuda.

18 Comentarios

  1. ariel

    no entiendo, esto no funciona, en la linea donde tengo este codigo:
    if (preg_match( ‘/’.$http.’/i’, $url))

    me tira el siguiente error

    Parse error: syntax error, unexpected ‘:’ in /www/tipsnet.com.ar/htdocs/URL1.php on line 4

    porque puede ser?
    gracias

  2. ariel

    modifico mi comentario anterior, el cual era por un error mio,
    ahora me tira este error

    Warning: preg_match() [function.preg-match]: Unknown modifier ‘/’ in /www/tipsnet.com.ar/htdocs/URL1.php on line 6

  3. ariel

    ya logre resolver el problema y lo hice de la siguiente forma, por si sirve el aporte:

    $url= $_POST[‘url’];
    $http= “http:\/\/”; //anule las barras invertidas porque sino me daba error
    if (preg_match( ‘/’.$http.’/i’, $url))
    echo “si”;
    else
    echo “no”;

    saludos!

    1. Administrador Microteching Autor del artículo

      Muchas gracias!
      Las expresiones regulares muchas veces se pueden convertir en un auténtico quebradero de cabeza…

      Un saludo!

  4. JesusRomero

    Tengo una linea:

    eregi(“/”.$xoopsModule->getVar(‘dirname’).”/”, $link)

    tengo que cambiarla a:

    preg_match(“#/#”.$xoopsModule->getVar(‘dirname’).”/”, $link)

    y me tira error

    1. Administrador Microteching Autor del artículo

      En principio no debería ser… preg_match(“/”.$xoopsModule->getVar(‘dirname’).”/i”, $link)???
      Solo le he quitado las almohadillas y le he añadido la i al final por si quieres imitar el comportamiento de ‘eregi’.
      No se… Te lo digo así a botepronto…
      Saludos!

  5. JesusRomero

    no nada que ver…

    Aviso: Use of undefined constant � – assumed ‘�’ en el archivo /modules/multiMenu/blocks/block.php y línea 120
    Aviso: Use of undefined constant � – assumed ‘�’ en el archivo /modules/multiMenu/blocks/block.php y línea 120
    Advertencia: Division by zero en el archivo /modules/multiMenu/blocks/block.php y línea 120

    1. Administrador Microteching Autor del artículo

      Podría ser que estubieras utilizando los simbolos de comillas tanto simples como dobles inadecuados?
      Prueba a copiar y pegar esto:
      preg_match(“/”.$xoopsModule->getVar(‘dirname’).”/i”, $link)
      Sinó, verifica también la codificación. A ver si es UTF y si es con BOM o sin BOM.
      A ver si suena la flauta…
      xD

  6. nene

    por ejemplo
    yo no se de programacion pero me da error
    Warning: preg_match() [function.preg-match]: Delimiter must not be alphanumeric or backslash in

    y en esa linea dice asi
    if( preg_match(“\/$”, ‘/’.$lore_system->settings[‘knowledge_base_domain’]) )
    {

    como deberia decir ???

Responder a Thedandy Cancelar respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.