2012-04-06 18 views
6

Quiero poder validar la expresión regular ingresada del usuario, para verificar si es válida o no. Lo primero que encontré con PHP es filter_var con la constante FILTER_VALIDATE_REGEXP, pero eso no hace lo que quiero, ya que debe pasar una expresión regular a las opciones, pero no estoy regexando contra nada, así que básicamente solo está comprobando la validez de la expresión regular.Cómo validar una expresión regular con PHP

Pero se entiende la idea de cómo validar la expresión regular de un usuario (que no coincide con nada).

Ejemplo de validación, en palabras sencillas:

$user_inputted_regex = $_POST['regex']; // e.g. /([a-z]+)\..*([0-9]{2})/i 

if(is_valid_regex($user_inputted_regex)) 
{ 
    // The regex was valid 
} 
else 
{ 
    // The regex was invalid 
} 

Ejemplos de validación:

/[[0-9]/i    // invalid 
//(.*)/    // invalid 
/(.*)-(.*)-(.*)/  // valid 
/([a-z]+)-([0-9_]+)/i // valid 
+0

¿Puede ser más explícito acerca de lo que quiere decir con 'que coincide con nada'? Es una cadena vacía? –

+0

Me refiero a nada como una variable, no estoy aprobando nada para validar contra la expresión regular del usuario. – MacMac

+0

Lamento volver a plantear este problema, pero si "no pasa nada para validar contra la expresión regular del usuario", ¿cómo puede validar la expresión regular? Usted dijo en la pregunta que no desea verificar la validez, así que, ¿qué diablos quiere ver contra la expresión regular? –

Respuesta

5

He aquí una idea (demo):

function is_valid_regex($pattern) 
{ 
    return is_int(@preg_match($pattern, '')); 
} 

preg_match() devuelve el número de veces patrón coincide. Eso será 0 veces (sin coincidencia) o 1 vez porque preg_match() detendrá buscando después de la primera coincidencia.

preg_match() devuelve FALSE si ocurre un error.

Y para obtener la razón por la cual el patrón no es válido, use preg_last_error.

2

Usted tendría que escribir su propia función para validar una expresión regular. Puede validarlo hasta decir si contiene caracteres ilegales o mala forma, pero no hay manera de probar que es una expresión que funciona. Para eso, necesitarías crear una solución.

Pero entonces te das cuenta de que realmente no existe una expresión regular no válida. Una expresión regular está basada en el rendimiento. O coincide o no y depende del sujeto de la prueba, incluso si la expresión o sus resultados son aparentemente insignificantes.

En otras palabras, solo puede probar una expresión regular para la sintaxis válida ... ¡y eso puede ser casi cualquier cosa!

+0

Por supuesto, existe una expresión regular no válida. Tome "estructura grupal incompleta" como ejemplo. –

Cuestiones relacionadas