2010-07-05 11 views
1

J'utilise l'expression régulière ci-dessous pour éliminer tous les caractères non latins. Par conséquent, j'ai trouvé que si j'utilise une chaîne de plus de 342 caractères, la fonction échoue, tout abandonne et la connexion au site Web est réinitialisée. Je l'ai narrée jusqu'à la propriété de caractère unicode \ p {P}, qui correspond à n'importe quel caractère de ponctuation.Expressions régulières Unicode - Échec à 343 caractères

Est-ce que quelqu'un sait/voit où se situe le problème, exactement?

preg_match('/^([\p{P}\p{S}&\p{Latin}0-9]|\s)*$/u', 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa');

+1

hy-vous eeding toutes non caractères latins? Votre texte aurait-il l'air si vous avez supprimé toutes les occurrences de certains caractères du texte anglais? –

+0

@Greg: Comment ça fonctionne pour vous? – Stephen

+0

@Greg, je veux essentiellement que les gens utilisent uniquement des caractères latins. Il fait le travail sauf dans le cas où il y a plus de 342 caractères. Je ne suis pas sûr pourquoi. Ainsi la question. – KcYxA

Répondre

1

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 validate l'entrée. J'allais dire, utilisez ceci:

preg_match('/^[\p{Latin}]+$/u', $s) 

... mais il se trouve que les matches que le latin lettres. Je pensais à un raccourci sans papier de Java, \p{L1}, qui correspond tout dans le jeu de caractères Latin1 (ISO-de 8859-1), mais en PHP vous devez le préciser:

preg_match('/^[\x00-\xFF]+$/u', $s) 
+0

merci. Cependant, je voudrais informer l'utilisateur de l'erreur, et j'ai besoin de la validation pour échouer afin qu'une erreur se produise. Ainsi, la règle de validation (l'expression reg) doit rechercher à quoi ressemble «correct». – KcYxA

+0

votre suggestion a fonctionné. Ensuite, j'ai essayé de l'intégrer dans mon chemin et il s'est avéré que le coupable était les parantheses et la déclaration "ou". Pour quelque raison que ce soit. Donc, cela a aussi bien fonctionné: '/^[\ p {P} \ p {S} & \ p {Latin} 0-9 \ s] * $/u'. Merci! – KcYxA

+0

Oh oui, je voulais suggérer cela. Je savais qu'il était gratuit et inefficace de mettre le \ s dans sa propre alternative et d'envelopper le tout dans un groupe de capture, mais je ne m'attendais pas à ce qu'il devienne en forme de poire sur une si petite entrée. –