2010年7月26日月曜日

Stringのlengthで全角を2文字として扱ってみる[AS3]

※注 - よくわかってないで記事書いてるので、いろいろ勘違いしているかも。突っ込み歓迎。

どうやらActionScript3のStringのlengthってマルチバイト文字も1として数えてるみたい。
今まで気にしてなかったけど、例えばPHPのstrlen関数はマルチバイト文字は2としているので、差異がある。

そこで、マルチバイト文字を2として数える方法ないかなーと思ったけど、見つからない。
というわけで、自分で作ってみた。
var str:String = "1@a $%&'=a ぁa←あア亜1@";
var reg:RegExp = new RegExp("[^ -~。-゚]", "g");
trace(str);
trace(str.length);
trace(str.match(reg));
trace(str.match(reg).length);
trace(str.length + str.match(reg).length);
実行結果
1@a $%&'=a ぁa←あア亜1@
19
 ,ぁ,a,←,あ,ア,亜,1,@
9
28
一応合ってる。

正規表現を使ってます。参考:ASCIIコード表
半角の文字以外にマッチする正規表現を作って、マッチした文字数を足してます。

0 件のコメント:

コメントを投稿