PHPでは、 ctype_upper()は、文字列内のすべての文字が大文字かを検出するために使用される関数です。多くの場合、英語のキャラクターの検証に使用されますが、他の言語(特にラチン以外の文字セット)を含む文字を扱う場合、この機能は表面的に見えるほど一般的ではない場合があります。この記事では、 ctype_upper() 、典型的な使用シナリオ、および多言語処理におけるその制限の適用範囲を詳細に調べます。
ctype_upper()の基本的な使用法は非常に簡単です。文字列パラメーターを取り、文字列に大文字のみが含まれているかどうかを示すブール値を返します。
<Code> $ test1 = 'hello'; $ test2 = 'hello'; var_dump(ctype_upper($ test1)); //出力:bool(true)
var_dump(ctype_upper($ test2)); //出力:bool(false)
</code>
上記のコードは、キャピタルイングリッシュレターではない文字がある限り、戻り結果が虚偽であることを明確に示しています。
CTYPE_UPPER()は、C標準ライブラリのCTYPE.Hに基づいて実装され、その判断基準はASCII範囲内の大文字(つまり、ASCII 65〜90に対応)に限定されます。これは、機能がUTF-8文字または非ASCII文字セットの資本文字で正しい判断を下さないことを意味します。
例えば:
<Code> $ test3 ='école '; //フランス語の大文字$ test4 = 'σχολειο'; //ギリシャ語の大文字σχολειο var_dump(ctype_upper($ test3)); //出力:bool(false)
var_dump(ctype_upper($ test4)); //出力:bool(false)
</code>
視覚的にはそれらはすべて資本文字ですが、 CTYPE_UPPER()は、これらの文字がASCII範囲内にないため、 Falseを返します。
多言語をサポートし、ユーザー名がフルキャピタル入力であることを確認したい多言語登録フォームに取り組んでいる場合、 CTYPE_UPPER()を使用すると、多くの正当な入力を逃す可能性があります。
たとえば、フランスのユーザーがémilieに入り、それを法的資本形式として受け入れたいのですが、 CTYPE_UPPER()はそれを拒否します。この場合、PHPのMB_*シリーズ関数など、より高度な文字列処理機能が必要です。
mb_strtoupper()を使用して文字列を大文字に変換し、それを元の文字列と比較して、それが「すべての資本」であるかどうかを判断できます。
<code> $ input ='émilie '; $ isupper = $ input === mb_strtoupper($ input、 'utf-8'); var_dump($ isupper); //出力:bool(true)
</code>
これはASCIIをサポートするだけでなく、フランス語、ギリシャ語、ロシア語などのさまざまな言語の資本文字もサポートしています。
言語間処理を必要とするアプリケーションについては、次の提案を次に示します。
常にMB_*関数ファミリを使用して、マルチバイト文字列を処理します。
文字型検出を実行するときは、キャラクターセット(UTF-8など)を明確にします。
英語以外の文字処理にはCTYPE_*シリーズ関数を使用しないでください。
入力検証ルールについては、誤判断を避けるために言語認識戦略を提供してみてください。
CTYPE_UPPER()は、ASCII英語のキャラクターを扱うときに非常に効率的な機能ですが、非英語または非ASCIIキャラクターを扱う場合、大きな制限があります。アプリケーションが多言語ユーザー向けである場合、またはUnicode文字を含む場合、 MB_**シリーズの関数を使用して、互換性と精度を確保するために文字確認を実装することをお勧めします。