Unicode expresiones regulares - falla en 343 caracteres
-
02-10-2019 - |
Pregunta
Estoy usando la expresión regular siguiente para eliminar a todos los caracteres no latinos. Como resultado, he encontrado que si uso una cadena mayor de 342 caracteres, la función falla, todo se aborta, y la conexión se restablece página web.
Me narroed hacia abajo a la \ p {P} propiedad de caracteres Unicode, lo que coincide con cualquier carácter puntuacion.
¿Alguien sabe / ver dónde se encuentra el problema exactamente?
preg_match('/^([\p{P}\p{S}&\p{Latin}0-9]|\s)*$/u', 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa');
Solución
Si usted es "eliminar a los" caracteres no latinos, ¿por qué no hacer esto:
preg_replace('/[^\p{Latin}]+/u', '', $s)
EDIT: Bueno, por lo que estamos tratando de Validar la entrada. Yo iba a decir, utilice la siguiente:
preg_match('/^[\p{Latin}]+$/u', $s)
... pero resulta que sólo coincide con América las letras . Estaba pensando en la taquigrafía indocumentado, \p{L1}
de Java, que coincide con todo en el Latin1 (ISO-8859-1) juego de caracteres, pero en PHP que tengo que explicarlo:
preg_match('/^[\x00-\xFF]+$/u', $s)