2012-02-27 11 views
6

Estoy construyendo una interfaz de usuario de administrador donde un usuario puede administrar una lista de cadenas PCRE que se pasan a PHP preg_match en otros puntos de mi aplicación.¿Cómo puedo saber si una cadena dada es una entrada válida para preg_match de PHP?

Antes de almacenar la entrada del usuario para su uso posterior por preg_match, primero me gustaría validar que la entrada del usuario es una expresión PCRE válida, de lo contrario, más tarde pasándola a preg_match arroja un error.

¿Cuál es la mejor manera de validar una cadena dada para ver si es una PCRE válida en PHP?

Respuesta

3

Su mejor opción será pasar la cadena a preg_match y detectar los errores que puedan ocurrir.

try{ 
    preg_match($in_regex, $string, $results); 
    //Use $results 
} catch (Exception $e) { 
    echo "Sorry, bad regex (/" . $in_regex . "/)"; 
} 

[Editar] Dado que no va a funcionar, usted podría intentar:

function bad_regex($errno, $errstr, $errfile, $errline){ 
    echo "Sorry, bad regex."; 
} 
set_error_handler("bad_regex"); 
preg_match($in_regex, $string, $results); 
restore_error_handler(); 
+0

no pensé 'preg_match' lanzó una excepción capturable ... voy a tratar esto. Si estoy equivocado, me siento tímido. – Josh

+0

Además, puede usar 'preg_last_error' para obtener más información sobre el error – scibuff

+0

Sí, esto no funcionará. 'preg_match' no arroja una excepción, causa un' E_WARNING': 'Advertencia: preg_match(): Delimitador no debe ser alfanumérico o barra invertida en - en la línea 4'. Esto interrumpirá el proceso de guardado de mi aplicación, ya que no puedo captar esa advertencia y reanudar. – Josh

Cuestiones relacionadas