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

Était-ce utile?

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)
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top