13,133
回編集
(→文字列の連結) |
(→変数展開) |
||
| 161行目: | 161行目: | ||
<br><br> | <br><br> | ||
== | == 全角・半角 == | ||
全角・半角が混ざった文字列を正確にカウントする場合、いくつかの方法が存在する。<br> | |||
必ず、エンコーディング (UTF-8等) を指定する必要があることに注意する。<br> | |||
<br> | <br> | ||
また、全角・半角を区別してカウントする場合は、正規表現を使用することができる。<br> | |||
<br> | |||
==== mb_strlen関数の使用 ==== | |||
これは、簡便で高速な方法である。<br> | |||
<syntaxhighlight lang="php"> | <syntaxhighlight lang="php"> | ||
$ | $str = "1 あ イ"; | ||
echo " | |||
$count1 = mb_strlen($str, 'UTF-8'); | |||
echo "mb_strlen(): " . $count1 . "\n"; // 結果: 5 | |||
</syntaxhighlight> | </syntaxhighlight> | ||
<br> | <br> | ||
==== preg_match_all関数を使用して文字単位でカウント ==== | |||
より複雑なパターンマッチングが必要な場合に使用する。<br> | |||
<syntaxhighlight lang="php"> | <syntaxhighlight lang="php"> | ||
$ | $str = "1 あ イ"; | ||
echo " | |||
$count2 = preg_match_all('/./u', $str, $matches); | |||
echo "preg_match_all(): " . $count2 . "\n"; // 結果: 5 | |||
</syntaxhighlight> | </syntaxhighlight> | ||
<br> | <br> | ||
==== 配列に分解してカウント ==== | |||
<syntaxhighlight lang="php"> | <syntaxhighlight lang="php"> | ||
$ | $str = "1 あ イ"; | ||
echo " | |||
$array = preg_split("//u", $str, -1, PREG_SPLIT_NO_EMPTY); | |||
$count3 = count($array); | |||
echo "preg_split(): " . $count3 . "\n"; // 結果: 5 | |||
</syntaxhighlight> | </syntaxhighlight> | ||
<br> | <br> | ||
< | ==== mb_str_split関数の使用 (PHP 7.4以降) ==== | ||
< | 文字列を配列に分解できるため、文字ごとの処理が必要な場合に便利である。<br> | ||
<syntaxhighlight lang="php"> | |||
$str = "1 あ イ"; | |||
$array2 = mb_str_split($str); | |||
$count4 = count($array2); | |||
echo "mb_str_split(): " . $count4 . "\n"; // 結果: 5 | |||
</syntaxhighlight> | |||
<br> | |||
==== 空白を除外してカウント ==== | |||
<syntaxhighlight lang="php"> | |||
$str = "1 あ イ"; | |||
$count_no_spaces = mb_strlen(str_replace(' ', '', $str), 'UTF-8'); | |||
echo "空白を除外: " . $count_no_spaces . "\n"; // 結果: 3 | |||
</syntaxhighlight> | |||
<br> | |||
==== 文字種別ごとにカウント ==== | |||
<syntaxhighlight lang="php"> | |||
$str = "1 あ イ"; | |||
$zenkaku_count = preg_match_all('/[ぁ-んァ-ンー一-龠]/u', $str, $matches); | |||
$hankaku_count = preg_match_all('/[\x{FF01}-\x{FF5E}]/u', $str, $matches); | |||
$space_count = mb_substr_count($str, ' '); | |||
echo "全角文字数: " . $zenkaku_count . "\n"; // 結果: 1 | |||
echo "半角カナ数: " . $hankaku_count . "\n"; // 結果: 1 | |||
echo "空白文字数: " . $space_count . "\n"; // 結果: 2 | |||
</syntaxhighlight> | |||
<br><br> | <br><br> | ||