Autor Tema: como usar validar expresion regular  (Leído 1458 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado flavioSalas

  • Novato
  • *
  • Mensajes: 35
  • Puntuación: -1
    • Ver Perfil
como usar validar expresion regular
« : 22 de diciembre de 2013, 12:48:12 am »

como puedo validar que el primer parametro que le pase a la funcion preg_match sea una expresion regular valida?
tengo un metodo de X clase que va tomando de un array X+1 expresionse regulares
 todo funciona 100 % pero necesito que cuando algun animal haga una instancia de mi clase y coloque una expresion regular invalida el metodo le diga "no seas tan animal y antes de evaluar la expresion regular recuerda ingresar una que sea valida! burro!"

como hago para validar que el primer parametro pasado a  la funcion preg_match sea una expresion regular valida? he buscado en el manual y nada alguno tiene una idea?

Desconectado flavioSalas

  • Novato
  • *
  • Mensajes: 35
  • Puntuación: -1
    • Ver Perfil
Re:como usar validar expresion regular
« Respuesta #1 : 22 de diciembre de 2013, 03:16:37 am »
function is_preg_error()
{
    $errors = array(
        PREG_NO_ERROR               => 'Code 0 : No errors',
        PREG_INTERNAL_ERROR         => 'Code 1 : There was an internal PCRE error',
        PREG_BACKTRACK_LIMIT_ERROR  => 'Code 2 : Backtrack limit was exhausted',
        PREG_RECURSION_LIMIT_ERROR  => 'Code 3 : Recursion limit was exhausted',
        PREG_BAD_UTF8_ERROR         => 'Code 4 : The offset didn\'t correspond to the begin of a valid UTF-8 code point',
        PREG_BAD_UTF8_OFFSET_ERROR  => 'Code 5 : Malformed UTF-8 data',
    );

    return $errors[preg_last_error()];
}

http://stackoverflow.com/questions/4440626/how-can-i-validate-regex
aqui sale un ejemplo!

Desconectado flavioSalas

  • Novato
  • *
  • Mensajes: 35
  • Puntuación: -1
    • Ver Perfil
Re:como usar validar expresion regular
« Respuesta #2 : 22 de diciembre de 2013, 07:53:48 pm »
solucion final:
he indagado por alli, en el manual oficial solo aparencen tipos de errores referente siempre a cuando se supone que hay una expresion regular bien formulada.

supongamos que tengo dos expresiones  sencillas regulares para validar enteros mayores a cero:
la primera es correcta :
$a =' <^([1-9]){1}(\d){0,}$>';

la segunda es incorrecta pues no tiene los delimitadores
$b =' ^([1-9]){1}(\d){0,}$';


cuando ejecuto la funcion preg_match en ambas me dispara un error en la segunda (es obvio)
pero si se silencia la salida de preg_match:

$test = @preg_match($b,'12345');

esta siempre da falso aunque el segundo argumento sea un entero mayor a cero.
si luego ejecuto la funcion preg_last_error

echo preg_last_error(); (el resultado es 0 ) wdf!!!!!

la solucion es tan simple, tenemos que ejecutar el preg_match de manera que siempre el segundo parametro pasado sea true lurgo que sepamos que el pcre es valido, ejecutamos como de costumbre (preg_match($a,'12345'))

ejemplo:

$statusMatch = (@preg_match($a,null) !== FALSE); // es true mi expresion regular es valida
$expreionValida = preg_match($a,'12345'); // es true mi segundo parametro
$expreionValida = preg_match($a,'dy463634')  // es false mi segundo parametro

----------ejemplo2

$statusMatch = (@preg_match($b,null) !== FALSE); // es false mi expresion regular es invalida
exit('Animal Tu expresion regular es invalida');



Esto era lo que necesitaba, ahora para ahorar codigo tendria que crear un try catch dentro del metodo para validar mi expresion regular, untando mi valor  $statusMatch, el valor de mi segundo parametro en el preg_match y el valor del retorno de la funcion preg_last_error() para no dejar clavos sueltos.
(HOMEWORK!)