Puisque vous voulez aussi faire correspondre d'autres caractères, cherchez des lettres minuscules plutôt que des majuscules. Si trouvé, renvoyez false. (. Ou utiliser tdammers' suggestion d'une classe de caractère négatif)
return !preg_match('/[a-z]/', $str);
Vous pouvez aussi sauter regex et juste comparer strtoupper($str)
avec la chaîne d'origine, ce qui laisse des chiffres et des symboles intacts:
return strtoupper($str) == $str;
Les deux ne le font pas compte pour les chaînes multi-octets si; pour cela, vous pouvez essayer d'ajouter un modificateur u
à la regex et d'utiliser mb_strtoupper()
respectivement (je n'ai pas testé non plus - quelqu'un de plus expérimenté avec Unicode pourrait-il vérifier cela?).
Est-ce texte ASCII ou texte UTF-8? – tchrist