non a prioris c’est pas ca.
J’ai du y réfléchir quelques minutes.
Je sais pas comment preg_match fonctionne exactement.
Mais a mon avis, il prend le code du caractère a par exemple, et cherche dans la chaine s’il trouve le meme code (donc le meme caractère).
Mais tu utilises htmlentities !!!
En UTF-8, å a un certain code disons 2550 (c’est pas le bon ^^)
Lorsque tu applique la fonction htmlentities : å est transformé en : å (il faut donc coder le &, a, r, i, n, g et ; en UTF-8).
Donc la regex va chercher le code 2550 dans la chaine, mais il ne le trouvera pas (si mon raisonement est correct !), car å n’est plus dans la chaine !
Il y a donc différentes solutions : tu codes en UTF-8, vérifies les regex et ensuite seulement htmlentities, ou alors tu autorises & et ; dans la regex (mais bon alors tu controles plus grand chose … ).
Puis je te conseille aussi de vérifier la longueur des chaines, ainsi qu’une fonction qui vérifie qu’on tappe que des caractères (le nom ‘0’ passerait le test de ta regex … ).