Foros del Web » Programando para Internet » PHP »

PHP OO ereg -> preg_match

Estas en el tema de ereg -> preg_match en el foro de PHP en Foros del Web. Ayer me entere que ereg estaba deprecada, entonces estoy intentando pasar mis RE para que sean aceptadas por el preg_match, al principio pense que al ...
  #1 (permalink)  
Antiguo 31/08/2011, 09:09
Avatar de h2swider  
Fecha de Ingreso: julio-2007
Ubicación: Ciudad de Buenos Aires
Mensajes: 932
Antigüedad: 16 años, 8 meses
Puntos: 194
ereg -> preg_match

Ayer me entere que ereg estaba deprecada, entonces estoy intentando pasar mis RE para que sean aceptadas por el preg_match, al principio pense que al agregarles el / al principio y final bastaria, pero me esta tirando un warning "Unknown modifier '[' en la linea que corresponde al 'periodo'

Antes (funcionaba)
Código PHP:
private static $validador = Array(
        
'requerido' => array('expresion' =>'[^[:space:],0]','error'=>' es un dato obligatorio.'),
        
'usuario'   => array('expresion' =>'(^(u|U)(p|P)[0-9]{10,15}[a-z|A-Z]{0,1}$)|^0{0,1}$','error'=>'Ingreso algún usuario inválido.'),
        
'file'      => array('expresion' =>'(^[0-9]{1,7}$)|^0{0,1}$','error'=>'Ingreso algún file inválido.'),
        
'modulo'    => array('expresion' =>'(^[0-9]{1,4}$)|^0{0,1}$','error'=>'Ingreso algún modulo inválido.'),
        
'periodo'   => array('expresion' =>'(^((0[1-9]|1[0-2])/[1-2][0-9]{3})$)|^0{0,1}$','error'=>'Ingreso algún período inválido.'),
        
'proceso'   => array('expresion' =>'(^[0-9]{1,6}$)|^0{0,1}$','error'=>'Ingreso algún proceso inválido.')
    );
    private static 
$formularioValido true;

    
/**
     * Aplica una validación a la cadena
     * En caso de que la cadena tenga comas, se separará por las mismas y se hará una validación de cada poisición que fue separada.
     * 
     * @static
     * @param string Es el valor (normalmente un post) que tendrá que analizar si está validado o no.
     * @param string Es el tipo de validación que se llevará a cabo. Valores posibles: 'requerido' , 'usuario' , 'file' , 'modulo' , 'periodo' , 'proceso' .
     * @param string mensaje de error (por defecto será null)
     * @return boolean en caso de que el dato sea correcto devolverá true, sino false.
     */
    
public static function validar($values$validador$nombre null) {
        
$valido true;
        
$values explode(',',$values);
        foreach (
$values as $value) {
            if (!
ereg(self::$validador[$validador]['expresion'], $value)){
                
$valido false;
                
self::$formularioValido false;
                
self::$errores[] = $nombre.self::$validador[$validador]['error'];
                break;
            }
        }
        return 
$valido;
    } 
Actual
Código PHP:
private static $validador = Array(
        
'requerido' => array('expresion' =>'/[^[:space:],0]/','error'=>' es un dato obligatorio.'),
        
'usuario'   => array('expresion' =>'/(^(u|U)(p|P)[0-9]{10,15}[a-z|A-Z]{0,1}$)|^0{0,1}$/','error'=>'Ingreso algún usuario inválido.'),
        
'file'      => array('expresion' =>'/(^[0-9]{1,7}$)|^0{0,1}$/','error'=>'Ingreso algún file inválido.'),
        
'modulo'    => array('expresion' =>'/(^[0-9]{1,4}$)|^0{0,1}$/','error'=>'Ingreso algún modulo inválido.'),
        
'periodo'   => array('expresion' =>'/(^((0[1-9]|1[0-2])/[1-2][0-9]{3})$)|^0{0,1}$/','error'=>'Ingreso algún período inválido.'),
        
'proceso'   => array('expresion' =>'/(^[0-9]{1,6}$)|^0{0,1}$/','error'=>'Ingreso algún proceso inválido.')
    );
    private static 
$formularioValido true;

     
/**
     * Aplica una validación a la cadena
     * En caso de que la cadena tenga comas, se separará por las mismas y se hará una validación de cada poisición que fue separada.
     * 
     * @static
     * @param string Es el valor (normalmente un post) que tendrá que analizar si está validado o no.
     * @param string Es el tipo de validación que se llevará a cabo. Valores posibles: 'requerido' , 'usuario' , 'file' , 'modulo' , 'periodo' , 'proceso' .
     * @param string mensaje de error (por defecto será null)
     * @return boolean en caso de que el dato sea correcto devolverá true, sino false.
     */
    
public static function validar($values$validador$nombre null) {
        
$valido true;
        
$values explode(',',$values);
        foreach (
$values as $value) {
            if (!
preg_match(self::$validador[$validador]['expresion'], $value)){
                
$valido false;
                
self::$formularioValido false;
                
self::$errores[] = $nombre.self::$validador[$validador]['error'];
                break;
            }
        }
        return 
$valido;
    } 
__________________
Codifica siempre como si la persona que finalmente mantedra tu código sea un psicópata violento que sabe donde vives
  #2 (permalink)  
Antiguo 31/08/2011, 09:20
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: ereg -> preg_match

Creo que debes leer lo siguiente:
http://www.forosdelweb.com/f18/aport...s-pcre-646110/

Si usas el mismo carácter delimitador dentro de la expresión, éste debe ser escapado.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 31/08/2011, 09:30
Avatar de h2swider  
Fecha de Ingreso: julio-2007
Ubicación: Ciudad de Buenos Aires
Mensajes: 932
Antigüedad: 16 años, 8 meses
Puntos: 194
Respuesta: ereg -> preg_match

Gracias, ya había leído en php.net y algunos otros sitios el funcionamiento de preg_match, pero en el link que me otorgas esta mas que bien resumido y explicado, creo que lo guardare entre favoritos.

De casualidad note que antes buscaba un / en la regular, y ahora como el / para preg_match es un delimitador, me faltaba escapearlo para que funcione correctamente

Modifique esta linea y todo funciono de maravilla.
Código PHP:
'/(^((0[1-9]|1[0-2])\/[1-2][0-9]{3})$)|^0{0,1}$/' 
Saludos
__________________
Codifica siempre como si la persona que finalmente mantedra tu código sea un psicópata violento que sabe donde vives
  #4 (permalink)  
Antiguo 31/08/2011, 09:39
Avatar de vgonga1986  
Fecha de Ingreso: marzo-2008
Ubicación: País de Pandereta
Mensajes: 1.021
Antigüedad: 16 años, 1 mes
Puntos: 253
Respuesta: ereg -> preg_match

Sólo un apunte, quisquilloso con el tema del lenguaje.

Deprecada suena a rallos (creo que ni si quiera existe esa palabra en castellano). Obsoleta está bien para lo que quieres decir. Cosas de frikis del idioma (yo mismo).

Un saludo y bienvenido, que veo que estás echando una mano en otros post como colaborador.
__________________
¿Alguna pregunta, duda, acotación, nota, cuestión, reparo, comentario, demanda, crítica, interpretación, objeción, interrogante, discrepancia, observación, réplica, disquisición, apostilla o exégesis?
  #5 (permalink)  
Antiguo 31/08/2011, 09:53
Avatar de h2swider  
Fecha de Ingreso: julio-2007
Ubicación: Ciudad de Buenos Aires
Mensajes: 932
Antigüedad: 16 años, 8 meses
Puntos: 194
Respuesta: ereg -> preg_match

Cita:
Iniciado por vgonga1986 Ver Mensaje
Sólo un apunte, quisquilloso con el tema del lenguaje.

Deprecada suena a rallos (creo que ni si quiera existe esa palabra en castellano). Obsoleta está bien para lo que quieres decir. Cosas de frikis del idioma (yo mismo).

Un saludo y bienvenido, que veo que estás echando una mano en otros post como colaborador.
Enseñando lo poco que se, es una buena manera de ejercitar lo que sé y aprender al mismo tiempo.

Con respecto a la palabra "deprecado" es verdad no existe, fallos del oficio que aveces se me escapan, igual que tantas otras como "castear a", "harcodeado" etc..

Saludos y gracias por la bienvenida
__________________
Codifica siempre como si la persona que finalmente mantedra tu código sea un psicópata violento que sabe donde vives

Etiquetas: ereg, formulario, usuarios
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 16:53.