サポンテ 勉強ノート

サポンテの勉強ノート・読書メモなどを晒します。

【PHP】全角文字は2文字で半角文字は1文字としてカウントする

 以下の、PHP (4.2.0以降)版です。

#!/usr/bin/php
<?php

$count = function ($str) {
    $len = 0;
    
    foreach (preg_split('//u', $str, null, PREG_SPLIT_NO_EMPTY) as $chr) {
        if (mb_ereg_match("[ -~]", $chr)) {
            $len += 1;
        } else {
            $len += 2;
        }
    }
    
    return $len;
};

echo $count("abcde") . "\n"; // 5
echo $count("ABCDE") . "\n"; // 5
echo $count("あいうえお") . "\n"; // 10
echo $count("aあ") . "\n"; // 3

参考