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');

¿Fue útil?

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)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top