web-dev-qa-db-ja.com

PHPで文字が大文字か小文字かを確認する方法は?

UTF-8の発音区別符号付きのテキストもあります。このテキストの最初の文字が大文字か小文字かを確認したいと思います。これを行う方法?

37

preg_呼び出しは、ここに掲載されている他のソリューションと比較して、最も直接的で簡潔で信頼性の高い呼び出しです。

echo preg_match('~^\p{Lu}~u', $string) ? 'upper' : 'lower';

私のパターンの内訳:

~      # starting pattern delimiter 
^      #match from the start of the input string
\p{Lu} #match exactly one uppercase letter (unicode safe)
~      #ending pattern delimiter 
u      #enable unicode matching

ctype_および< 'a'この一連のテストでは失敗します。

コード:( デモ

$tests = ['âa', 'Bbbbb', 'Éé', 'iou', 'Δδ'];

foreach ($tests as $test) {
    echo "\n{$test}:";
    echo "\n\tPREG:  " , preg_match('~^\p{Lu}~u', $test)      ? 'upper' : 'lower';
    echo "\n\tCTYPE: " , ctype_upper(mb_substr($test, 0, 1))  ? 'upper' : 'lower';
    echo "\n\t< a:   " , mb_substr($test, 0, 1) < 'a'         ? 'upper' : 'lower';

    $chr = mb_substr ($test, 0, 1, "UTF-8");
    echo "\n\tMB:    " , mb_strtoupper($chr, "UTF-8") == $chr ? 'upper' : 'lower';
}

出力:

âa:
    PREG:  lower
    CTYPE: lower
    < a:   lower
    MB:    lower
Bbbbb:
    PREG:  upper
    CTYPE: upper
    < a:   upper
    MB:    upper
Éé:               <-- trouble
    PREG:  upper
    CTYPE: lower  <-- uh oh
    < a:   lower  <-- uh oh
    MB:    upper
iou:
    PREG:  lower
    CTYPE: lower
    < a:   lower
    MB:    lower
Δδ:               <-- extended beyond question scope
    PREG:  upper  <-- still holding up
    CTYPE: lower
    < a:   lower
    MB:    upper  <-- still holding up

大文字、小文字、および非文字を区別する必要がある場合は、 this post を参照してください。

4
mickmackusa
function starts_with_upper($str) {
    $chr = mb_substr ($str, 0, 1, "UTF-8");
    return mb_strtolower($chr, "UTF-8") != $chr;
}

最初の文字を正しく分離するにはmb_substrが必要であることに注意してください。

44
Artefacto

使用する ctype_upper大文字をチェックする場合:

$a = array("Word", "Word", "Word");

foreach($a as $w)
{
    if(ctype_upper($w{0}))
    {
        print $w;
    }
}
25
Eugen

試した?

$str = 'the text to test';
if($str{0} === strtoupper($str{0})) {
   echo 'yepp, its uppercase';
}
else{
   echo 'nope, its not upper case';
}
11
Vidar Vestnes

Kohana 2オートローダー機能で使用されるように:

echo $char < 'a' ? 'uppercase' : 'lowercase';

文字列文字が整数にキャストされると、ASCII数に評価されます。ASCIIテーブルで最初にわかるように、いくつかの制御文字があります。ラテンアルファベットの大文字、ラテンアルファベットの小文字このように、文字のコードが小さなラテン文字aよりも小さいか大きいかを簡単に確認できます。

ところで、これは正規表現を使用したソリューションよりも約2倍高速です。

5
Haralan Dobrev

数字などを上位の文字にしたくないので、以下を使用します。

if(preg_match('/[A-Z]$/',$char)==true)
{
   // this must be an upper char
   echo $char
}
5
Dimmen

PHPは ctype_upper のようなctypeファミリーを提供します。

UTF-8で動作するようにするには、最初に setLocale() でロケールを正しく設定する必要があります。
たとえば、 ctype_alpha のコメントを参照してください。

使用法:

if ( ctype_upper( $str[0] )) {
    // deal with 1st char of $str is uppercase
}
4
Ring Ø

どうですか:

if (ucfirst($string) == $string) {dosomething();}
2
Tony

Nice関数で使用したい場合は、これを使用しました。

function _is_upper ($in_string)
{
    return($in_string === strtoupper($in_string) ? true : false);
}

その後、電話するだけです。

if (_is_upper($mystring))
{
  // Do....
}
1
Kver
if(ctype_upper(&value)){
    echo 'uppercase';
}
else {
    echo 'not upper case';
}
1
Sumith Harshan