2010-11-18 7 views
32

Quelle est la meilleure façon de voir si une chaîne contient toutes les lettres majuscules? Je veux toujours que la fonction renvoie true si la chaîne contient également des symboles ou des nombres.Vérifiez si une chaîne est tout CAPS en PHP

+0

Vous trouverez peut-être [ 's ($ str) -> isUpperCase()'] (https://github.com/delight-im/PHP-Str/blob/ea3e40132e9d4ce27da337dae6286f2478b15f56/src/Str.php# L262) utile, tel que trouvé dans [cette bibliothèque autonome] (https://github.com/delight-im/PHP-Str). – caw

+0

Voir ma solution ci-dessous - aucune regex ou fonctions requises pour cela. –

Répondre

99

Vérifiez si strtoupper($str) == $str

Pour gérer l'utilisation non-ascii:

mb_strtoupper($str, 'utf-8') == $str

+8

solution élégante :) –

+4

Simple et doux! Comme la légende selon laquelle les Russes utilisaient un crayon dans l'espace. – Kumar

+0

Nice. Bien joué. – Laizer

5

Si vous souhaitez que les numéros inclus (et par « symboles » plus tout le reste), alors ce que vous essayez réellement de tester est l'absence de lettres minuscules:

$all_upper = !preg_match("/[a-z]/", $string) 
1

solution PCRE:

$all_uppercase = preg_match('#^[A-Z]+$#', $string); 

assurez-vous de ne pas utiliser 'i' modificateur

1
if(mb_strtoupper($string)===$string) 
{ 
    do the required task 
} 
else 
{ 
    some other task 
} 
+2

Vous devez fournir 'utf-8' comme second argument ie.mb_strtoupper ('øæåØÆÅabcABC', 'utf-8'); –

11
+0

Comme cette réponse attire l'attention, il est intéressant de noter qu'elle ne répond pas correctement à la question, car elle ne tient pas compte des nombres, comme demandé par l'auteur. – JCM

+1

Il convient de noter que les fonctions Ctype font partie des 'Variable and Type Related Extensions'. Il faut aussi noter que le support intégré pour ctype est disponible depuis PHP 4.3.0. –

+0

ctype_upper retournera false si la chaîne contient un nombre. Voir ma solution ci-dessous. –

1

Je pense que vous êtes à la recherche de cette fonction

$myString = "ABCDE"; 
if (ctype_upper($myString)) // returns true if is fully uppercase 
{ 
    echo "the string $myString is fully uppercase"; 
} 

Hope it helps

+1

Notez que les fonctions Ctype font partie des 'Variable and Type Related Extensions'. Il faut aussi noter que le support intégré pour ctype est disponible depuis PHP 4.3.0. –

0

Outre le commentaire de Alexander Morland sur la réponse de Winston Ewert si vous avez besoin pour traiter utf-8 caractères accentués, vous pouvez utiliser l'ensemble des fonctions suivantes:

define('CHARSET', 'utf-8'); 

function custom_substr($content='',$pos_start=0,$num_char=1){ 
    $substr=''; 
    if(function_exists('mb_substr')){ 
     $substr=mb_substr($content,$pos_start,$num_char,CHARSET); 
    } 
    else{ 
     $substr=substr($content,$pos_start,$num_char); 
    } 
    return $substr; 
} 
function custom_str_case($string='', $case='lower'){ 
    $lower = array(
     "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", 
     "v", "w", "x", "y", "z", "à", "á", "â", "ã", "ä", "å", "æ", "ç", "è", "é", "ê", "ë", "ì", "í", "î", "ï", 
     "ð", "ñ", "ò", "ó", "ô", "õ", "ö", "ø", "ù", "ú", "û", "ü", "ý", "а", "б", "в", "г", "д", "е", "ё", "ж", 
     "з", "и", "й", "к", "л", "м", "н", "о", "п", "р", "с", "т", "у", "ф", "х", "ц", "ч", "ш", "щ", "ъ", "ы", 
     "ь", "э", "ю", "я" 
    ); 
    $upper = array(
     "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", 
     "V", "W", "X", "Y", "Z", "À", "Á", "Â", "Ã", "Ä", "Å", "Æ", "Ç", "È", "É", "Ê", "Ë", "Ì", "Í", "Î", "Ï", 
     "Ð", "Ñ", "Ò", "Ó", "Ô", "Õ", "Ö", "Ø", "Ù", "Ú", "Û", "Ü", "Ý", "А", "Б", "В", "Г", "Д", "Е", "Ё", "Ж", 
     "З", "И", "Й", "К", "Л", "М", "Н", "О", "П", "Р", "С", "Т", "У", "Ф", "Х", "Ц", "Ч", "Ш", "Щ", "Ъ", "Ъ", 
     "Ь", "Э", "Ю", "Я" 
    ); 

    if($case=='lower'){ 
     $string = str_replace($upper, $lower, $string); 
    } 
    else{ 
     $string = str_replace($lower, $upper, $string); 
    } 

    return $string; 
} 
function custom_strtolower($string){ 
    return custom_str_case($string,'lower'); 
} 
function custom_strtoupper($string){ 
    return custom_str_case($string,'upper'); 
} 

function custom_ucfirst($string){ 
    $string=custom_strtolower($string); 

    $first_char=custom_substr($string,0,1); 
    $rest_char=custom_substr($string,1,custom_strlen($string)); 
    $first_char=custom_strtoupper($first_char); 

    return $first_char.$rest_char; 
} 

function is_uppercase($string=''){ 
    $is_uppercase=false; 

    if($string === custom_strtoupper($string)) { 
     $is_uppercase=true; 
    } 

    return $is_uppercase; 
} 
function is_ucfirst($string=''){ 
    $first_char=custom_substr($string,0,1); 

    $is_ucfirst=is_uppercase($first_char); 

    return $is_ucfirst; 
} 

Ressources :: https://github.com/rafasashi/PHP-Custom-String-Functions

0

Voici comment je gère le texte ALL CAPS pour mes commentaires.

if ($str == strtoupper($str)) 
{ 
    $str = ucfirst(strtolower($str)); 
} 
Questions connexes