トップへ戻るニュースフォーラムFLASH-ML 過去ログBak@Flaダウンロードよくある質問と答
ログイン
ユーザ名:

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   迷える子羊の部屋【初心者専用】
     半角、全角
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
yakumo
Åê¹ÆNo.41873
投稿日時: 2009-3-25 17:22
常連
居住地: 東京
投稿: 67
使用環境:
WinVista,FlashCS4,Actionscript3.0
半角、全角
XMLファイルから文字列を取得し、
文字制限を付けて、テキストフィールドに
表示させるスクリプトを作っています。

lengthで文字数を取得し、制限を加えることはできましたが、
半角の多い文章と全角が多い文章では、
文章の長さがマチマチで見栄えが良くありません。

そこで、文章中の半角を2、全角を1とカウントして
制限をつけようと考えました。

ここでお聞きしたいんですが、
半角か全角かを取得する方法はあるのでしょうか?
どうぞよろしくお願いいたします。

※ActionScript3.0にて作業しています。
ゲスト
Åê¹ÆNo.41875
投稿日時: 2009-3-25 18:41
Re: 半角、全角
単純ですけど、
1文字ずつ文字コードをしらべて、1バイトか2バイトか判定していくのはどうでしょう?

文字数が多いと大変そうな気もしますが、
文字制限をするということなので大丈夫かと。


--------------------------------------------------------------------
すでに解決に向かっているということで追記という形で失礼します。
charCodeAtが文字コードを調べるための関数なので、これで判定できるかと思います。

例:
if(string.charCodeAt(index) > 0xff)
yakumo
Åê¹ÆNo.41876
投稿日時: 2009-3-25 20:21
常連
居住地: 東京
投稿: 67
使用環境:
WinVista,FlashCS4,Actionscript3.0
Re: 半角、全角
ma-kunさん

文字数は少ないので1文字づつ
判定していくことは問題ありませんが、
肝心の1バイトか2バイトかを判定する方法が分かりません?
ご教授いただけますか?


引用:

ma-kunさんは書きました:
単純ですけど、
1文字ずつ文字コードをしらべて、1バイトか2バイトか判定していくのはどうでしょう?

文字数が多いと大変そうな気もしますが、
文字制限をするということなので大丈夫かと。
yakumo
Åê¹ÆNo.41877
投稿日時: 2009-3-25 20:42
常連
居住地: 東京
投稿: 67
使用環境:
WinVista,FlashCS4,Actionscript3.0
Re: 半角、全角
自己レスです。

いろいろ調べてみると正規表現に
ヒントがありそうな事が分かりました。

Regexpなど、初めて知ったメソッドが
役に立ちそうなので探ってみます。


引用:

yakumoさんは書きました:
ma-kunさん

文字数は少ないので1文字づつ
判定していくことは問題ありませんが、
肝心の1バイトか2バイトかを判定する方法が分かりません?
ご教授いただけますか?


引用:

ma-kunさんは書きました:
単純ですけど、
1文字ずつ文字コードをしらべて、1バイトか2バイトか判定していくのはどうでしょう?

文字数が多いと大変そうな気もしますが、
文字制限をするということなので大丈夫かと。
永井勝則
Åê¹ÆNo.42099
投稿日時: 2009-4-13 23:47
職人
居住地: 白馬村
投稿: 796
使用環境:
Windows 7 :Flash CS4:
10.6.8 :Flash CS5.5
Re: 半角、全角
役立つかどうかは分かりませんが、
コリン・ムックのブログに次の記述がありました。

//http://www.moock.org/blog/archives/000288.html

function getNumBytesUTF8 (s:String):Number {
  var byteArray:ByteArray = new ByteArray();
  byteArray.writeUTFBytes(s);
  return byteArray.length;
}

trace(getNumBytesUTF8("automobile"));  // 10
trace(getNumBytesUTF8("車"));          // 3
--------------------------------------------
// 以下は追加
trace(getNumBytesUTF8("車寅"));        // 6 
trace(getNumBytesUTF8("車寅次"));      // 9
trace(getNumBytesUTF8("車寅次郎"));    // 12
trace(getNumBytesUTF8("車s"));         // 4
trace(getNumBytesUTF8("車su"));        // 5


同じようなことを別のメソッドを使って試してみました。
function getNumMultiByte (s:String):Number {
  var byteArray:ByteArray = new ByteArray();
  byteArray.writeMultiByte(s, "shift-jis");
  return byteArray.length;
}
trace(getNumMultiByte("automobile"));    // 10
trace(getNumMultiByte("車"));            // 2
trace(getNumMultiByte("車寅"));          // 4
trace(getNumMultiByte("車寅次"));        // 6
trace(getNumMultiByte("車寅次郎"));      // 8
trace(getNumMultiByte("車s"));           // 3
trace(getNumMultiByte("車su"));          // 4


どういったときに使うと便利なのですかねえ?


----------------
永井勝則:
himco.jp :

yakumo
Åê¹ÆNo.42106
投稿日時: 2009-4-14 12:27
常連
居住地: 東京
投稿: 67
使用環境:
WinVista,FlashCS4,Actionscript3.0
Re: 半角、全角
knagaiさん

ご返信有難うございます。

これは便利ですね?。
私はその後

var regExp:RegExp = new RegExp("[0-9,a-z,@-~]","i");

で評価する文字列を特定し、対象となる文字列を1文字づつ、
文字制限の範囲内でforで判定をくり返し判定しました。

該当すれば+0.5(半角)、該当しなければ+1(全角)でカウントを重ねていき、最終的に制限内の文字列を取得する方法でやってみました。

しかしこちらのソースの方がスマートですので、
これから検証させていただきたいと思います。
お知恵をいただきありがとうございます。
理解が深まりました。
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

投稿するにはまず登録を
 
Copyright (C) 2003 FLASH-japan. All rights reserved.
Powered by Xoops