2010-11-19 6 views
0

Je veux une expression régulière en PHP qui va vérifier tout en majuscules la chaîne.Regex qui valide pour toutes les majuscules

Si la chaîne donnée contient toutes les lettres majuscules sans tenir compte des chiffres et des autres caractères, elle doit correspondre.

+0

Est-ce texte ASCII ou texte UTF-8? – tchrist

Répondre

1

Quelque chose comme ça peut-être:

'/^[^a-z]*$/' 

L'astuce consiste à utiliser une classe de caractère exclusif: celui-ci correspond à tous les caractères qui ne sont pas des lettres minuscules. Notez que les lettres accentuées ne sont pas cochées.

3

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?).

+0

+1 pour une solution non-regex – teukkam

+0

+1 pour 'strtoupper ($ str) == $ str' – jensgram

3
if (preg_match('/^[^\p{Ll}]*$/u', $subject)) { 
    # String doesn't contain any lowercase characters 
} else { 
    # String contains at least one lowercase characters 
} 

\p{Ll} correspond à une lettre minuscule Unicode; [^\p{Ll}] correspond donc à tout caractère qui n'est pas une lettre minuscule.

+0

Bon travail avec les propriétés Unicode, Tim, au lieu de hardcoding' [a-z] 'comme le reste d'entre eux. – tchrist

+0

@tchrist: Eh bien, vous savez qui me l'a rappelé récemment :) –

+0

C'est parce qu'au travail je dois gérer les erreurs de programmation d'autres personnes liées à Unicode en moyenne plusieurs fois par semaine, généralement des expressions régulières ou des encodages d'E/S. L'enfant brûlé craint le feu. – tchrist

Questions connexes