Estoy escribiendo un script PHP que acepta un patrón de expresión regular del usuario que es utilizado por preg_match(). ¿Cómo puedo verificar que el patrón sea válido?¿Cómo atrapo un patrón de preg_match no válido?
Respuesta
Solo pruébalo. preg_match()
devolverá FALSE
si el patrón no es válido.
Valores devueltos: preg_match() devuelve el número de veces que coincide el patrón. Eso será 0 veces (sin coincidencia) o 1 vez porque preg_match() hará dejar de buscar después de la primera coincidencia. preg_match_all() por el contrario continuará hasta que llegue al final del asunto . preg_match() devuelve FALSE si ha ocurrido un error.
Según la docs,
preg_match() devuelve FALSE si se produjo un error.
el problema es que también lanzará una advertencia.
Una forma de resolver esto es suprimir la salida del mensaje de error, capturar el valor de retorno y generar el error usando error_get_last()
si es falso.
Algo así como
$old_error = error_reporting(0); // Turn off error reporting
$match = preg_match(......);
if ($match === false)
{
$error = error_get_last();
echo $error["message"];
}
error_reporting($old_error); // Set error reporting to old level
Es posible que no necesite el informe de bits de error en un entorno de producción - que depende de su configuración.
if (preg_match($regex, $variable)) {
echo 'Valid';
}
else {
echo 'InValid';
}
Debe usar preg_match (...)! == falso para verificarlo porque puede devolver 0 si es válido pero no lo hace no coincide – mck89
Debería estar comparando con FALSE: 'if (preg_match ($ regex, $ variable)! == FALSE) {'. El patrón puede ser válido, sin coincidencias. Consulte [docs] (http://nl2.php.net/manual/en/function.preg-match.php) – Lekensteyn
Puede usar preg_last_error() para obtener respuestas. página de detalle:
http://php.net/manual/en/function.preg-last-error.php
Gracias!
No utilice @, use una barra hacia atrás delante de preg_match
para arrojar la excepción en las versiones más nuevas de PHP (5.3+?).
tr{
if (\preg_match($regex, $variable)===false)
echo 'Valid';
else
echo 'InValid';
}
catch(Exception $e) {
echo $e->getMessage(); die;
}
La barra diagonal inversa solo hace referencia al espacio de nombres global. De lo contrario, no hace nada, ni siquiera cambia el comportamiento del error. –
- 1. Un patrón de expresiones regulares no válido
- 2. "preg_match(): Compilación falló: paréntesis incomparables" en PHP para el patrón válido
- 3. Python BaseHTTPServer, ¿cómo atrapo/atrapo errores de "tubería rota"?
- 4. ¿Cómo atrapo ClassCastException?
- 5. preg_match y caracteres latinos (no ingleses)?
- 6. ¿Cómo se realiza un preg_match donde el patrón es una matriz, en php?
- 7. ¿Cómo atrapo las señales en PowerShell?
- 8. Un patrón válido en ensamblaje para argumentos variados
- 9. is_numeric o un preg_match numérico?
- 10. ¿Cómo atrapo esta excepción en Swing?
- 11. Page.Request.UserHostAddress está en un formato no válido
- 12. Cómo convertir eregi a preg_match?
- 13. preg_match: nada que repetir/no puede competir
- 14. PHP formato preg_match biblia escritura
- 15. PHP preg_match un formato de fecha "aaaa-MM"
- 16. Cómo cambiar eregi de PHP para preg_match
- 17. ¿Cómo atrapo la excepción de violación de restricción de EclipseLink?
- 18. ¿cómo hago que este preg_match no sea sensible?
- 19. Shell equivalente de php preg_match?
- 20. caracteres especiales preg_match
- 21. PHP preg_match UUID v4
- 22. preg_match para varias palabras
- 23. UriFormatException: URI no válido: puerto no válido especificado
- 24. preg_match(); - Modificador desconocido '+'
- 25. hexadecimal 0x19 es un carácter no válido
- 26. ¿Cómo atrapo las excepciones de lectura en Haskell?
- 27. preg_match con caracteres internacionales y acentos
- 28. no es un valor válido AllXsd
- 29. symfony2 CSRF no válido
- 30. preg_match dirección de php calle
+1 Por mencionar la supresión de la salida del mensaje de error. – Gumbo
Ya sabes, no está prohibido usar '@': p – Artefacto
Debería ser 'if ($ match === false)' – webbiedave