Unicode Regular Expressions - 343 caractères à Fails
-
02-10-2019 - |
Question
J'utilise l'expression régulière ci-dessous pour éliminer les caractères non latins. En conséquence, je trouve que si j'utilise une chaîne supérieure à 342 caractères, la fonction échoue, Aborts de tout, et la connexion du site est remis à zéro.
Je narroed vers le bas au caractère unicode \ p {P} propriété, qui correspond à tout caractère de ponctuation.
Quelqu'un sait-il / voir où se trouve le problème exactement?
preg_match('/^([\p{P}\p{S}&\p{Latin}0-9]|\s)*$/u', 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa');
La solution
Si vous êtes « désherber » caractères non latins, pourquoi ne pas faire ceci:
preg_replace('/[^\p{Latin}]+/u', '', $s)
EDIT: Bon, alors vous essayez de Valider l'entrée. J'allais dire, utilisez ceci:
preg_match('/^[\p{Latin}]+$/u', $s)
... mais il se trouve que le latin qui correspond à lettres . Je pensais à un raccourci sans papier de Java, \p{L1}
, qui correspond tout dans le jeu de caractères Latin1 (ISO-8859-1), mais en PHP vous dois le préciser:
preg_match('/^[\x00-\xFF]+$/u', $s)