どうやら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コード表
半角の文字以外にマッチする正規表現を作って、マッチした文字数を足してます。