Position actuelle: Accueil> Derniers articles> Comment éviter une erreur de jugement numérique et symbole commune lors de l'utilisation de la fonction CTYPE_UPPER?

Comment éviter une erreur de jugement numérique et symbole commune lors de l'utilisation de la fonction CTYPE_UPPER?

gitbox 2025-08-22

Comment éviter une erreur de jugement numérique et symbole commune lors de l'utilisation de la fonction CTYPE_UPPER ?

Dans PHP, CTYPE_UPPER () est une fonction de classification de caractères couramment utilisée qui détecte si tous les caractères dans une chaîne sont des lettres majuscules. Sa syntaxe est très simple:

 <span><span><span class="hljs-keyword">bool</span></span><span> </span><span><span class="hljs-title function_ invoke__">ctype_upper</span></span><span>(</span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$text</span></span><span>);
</span></span>

Retour True si tous les caractères du texte de la chaîne sont des lettres majuscules, sinon renvoyez false . Cependant, dans le développement réel, la fonction CTYPE_UPPER () peut subir des erreurs de jugement inattendues, en particulier lorsque les chaînes contiennent des nombres ou des symboles. En effet, ctype_upper () ne vérifie que le type de caractère dans la chaîne, mais ne prend pas en compte le contexte du caractère.

Problèmes de mauvais évaluation communs

  1. Nombres et symboles erronés :
    La fonction ctype_upper () ne fait pas de distinction entre les lettres et les caractères non alphabétiques. Si la chaîne dans laquelle vous transmettez contient des nombres ou des symboles, ils sont traités comme des caractères "non-LowerCase", ce qui fait que CTYPE_UPPER () est revenu vrai , même si la chaîne contient des caractères non-lettres.

    Par exemple:

     <span><span><span class="hljs-variable">$text</span></span><span> = </span><span><span class="hljs-string">'HELLO123'</span></span><span>;
    </span><span><span class="hljs-title function_ invoke__">var_dump</span></span><span>(</span><span><span class="hljs-title function_ invoke__">ctype_upper</span></span><span>(</span><span><span class="hljs-variable">$text</span></span><span>));  </span><span><span class="hljs-comment">// Sortir bool(true),Jugement incorrect</span></span><span>
    </span></span>

    Ce jugement devrait revenir faux parce que 123 n'est pas une majuscule, mais CTYPE_UPPER () croit à tort qu'il s'agit d'une lettre majuscule.

  2. Espaces et caractères spéciaux :
    De même, les caractères non alphabétiques tels que les espaces, les marques de ponctuation dans une chaîne seront également mal jugés comme "conformes aux lettres majuscules", affectant ainsi le résultat de la fonction.

    Par exemple:

     <span><span><span class="hljs-variable">$text</span></span><span> = </span><span><span class="hljs-string">'HELLO WORLD!'</span></span><span>;
    </span><span><span class="hljs-title function_ invoke__">var_dump</span></span><span>(</span><span><span class="hljs-title function_ invoke__">ctype_upper</span></span><span>(</span><span><span class="hljs-variable">$text</span></span><span>));  </span><span><span class="hljs-comment">// Sortir bool(true),Jugement incorrect</span></span><span>
    </span></span>

    Les espaces et les marques d'exclamation ici ne doivent pas être considérés comme faisant partie des majuscules.

Comment éviter les erreurs de jugement

Pour résoudre ces problèmes, nous devons d'abord nous assurer que seuls les caractères alphabétiques de la chaîne participent au jugement. Vous pouvez filtrer les caractères non alphabétiques tels que les nombres, les espaces, les symboles, etc. à travers un prétraitement simple, puis appeler la fonction ctype_upper () .

1. Filtrez des caractères non alphabétiques

La fonction prég_replace () intégrée de PHP peut être utilisée pour supprimer les caractères non alphabétiques et seuls les caractères alphabétiques sont conservés. De cette façon, CTYPE_UPPER () ne sera pas dérangé par des caractères non alphabétiques.

 <span><span><span class="hljs-variable">$text</span></span><span> = </span><span><span class="hljs-string">'HELLO123'</span></span><span>;
</span><span><span class="hljs-variable">$filtered_text</span></span><span> = </span><span><span class="hljs-title function_ invoke__">preg_replace</span></span><span>(</span><span><span class="hljs-string">'/[^a-zA-Z]/'</span></span><span>, </span><span><span class="hljs-string">''</span></span><span>, </span><span><span class="hljs-variable">$text</span></span><span>);  </span><span><span class="hljs-comment">// Seules les lettres sont conservées</span></span><span>
</span><span><span class="hljs-title function_ invoke__">var_dump</span></span><span>(</span><span><span class="hljs-title function_ invoke__">ctype_upper</span></span><span>(</span><span><span class="hljs-variable">$filtered_text</span></span><span>));  </span><span><span class="hljs-comment">// 正确Sortir bool(true)</span></span><span>
</span></span>

2. Vérifiez et filtrez les espaces et symboles

Si la chaîne contient des espaces et d'autres symboles, vous pouvez également supprimer ces caractères avant de vérifier s'il s'agit de majuscules.

 <span><span><span class="hljs-variable">$text</span></span><span> = </span><span><span class="hljs-string">'HELLO WORLD!'</span></span><span>;
</span><span><span class="hljs-variable">$filtered_text</span></span><span> = </span><span><span class="hljs-title function_ invoke__">preg_replace</span></span><span>(</span><span><span class="hljs-string">'/[^a-zA-Z]/'</span></span><span>, </span><span><span class="hljs-string">''</span></span><span>, </span><span><span class="hljs-variable">$text</span></span><span>);  </span><span><span class="hljs-comment">// Retirer les espaces et les symboles</span></span><span>
</span><span><span class="hljs-title function_ invoke__">var_dump</span></span><span>(</span><span><span class="hljs-title function_ invoke__">ctype_upper</span></span><span>(</span><span><span class="hljs-variable">$filtered_text</span></span><span>));  </span><span><span class="hljs-comment">// Sortir bool(true)</span></span><span>
</span></span>

3. Ajouter une inspection plus détaillée

Si un contrôle plus fin est requis, il est recommandé de mettre en œuvre vous-même une fonction, ce qui peut non seulement vérifier si le caractère est une lettre, mais aussi s'assurer qu'il est capitalisé. Par exemple:

 <span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">is_all_upper</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$text</span></span></span><span>) {
    </span><span><span class="hljs-comment">// Filtrez des caractères non alphabétiques</span></span><span>
    </span><span><span class="hljs-variable">$filtered_text</span></span><span> = </span><span><span class="hljs-title function_ invoke__">preg_replace</span></span><span>(</span><span><span class="hljs-string">'/[^a-zA-Z]/'</span></span><span>, </span><span><span class="hljs-string">''</span></span><span>, </span><span><span class="hljs-variable">$text</span></span><span>);
    
    </span><span><span class="hljs-comment">// Déterminez s&#39;il s&#39;agit de lettres majuscules</span></span><span>
    </span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-title function_ invoke__">ctype_upper</span></span><span>(</span><span><span class="hljs-variable">$filtered_text</span></span><span>);
}

</span><span><span class="hljs-variable">$text</span></span><span> = </span><span><span class="hljs-string">'HELLO123'</span></span><span>;
</span><span><span class="hljs-title function_ invoke__">var_dump</span></span><span>(</span><span><span class="hljs-title function_ invoke__">is_all_upper</span></span><span>(</span><span><span class="hljs-variable">$text</span></span><span>));  </span><span><span class="hljs-comment">// Sortir bool(true)</span></span><span>
</span></span>

Résumer

CTYPE_UPPER () est une fonction très utile, mais lorsqu'elle est utilisée dans la pratique, nous devons nous assurer que son jugement n'est pas affecté par des caractères non alphabétiques (tels que les nombres, les symboles, les espaces, etc.). Grâce à un prétraitement et au filtrage raisonnables, des problèmes de mauvaise évaluation courants peuvent être évités, améliorant ainsi la robustesse du code. Dans le développement réel, nous devons non seulement prêter attention au type de caractères, mais également considérer de manière approfondie le contexte de la chaîne pour assurer la précision des données.