JavaScript NNで日本語文字を1つづつ切り出すには?

[上に] [前に] [次に]
とびお [E-Mail] 1999/10/12(火) 11:35:49
Javascriptで日本語文字を1文字づつ切り出したいのです。
過去の履歴(「JavaScriptで半角カナを判断するには?」)を検索して
ソースも確認しましたがNNでは日本語文字を切り出せませんでした。

NN4.0x以上と限定しています。

どなたか教えていただけませんか?
#IEでのsubstr、charAtと同様に動作するものを求め入ています。

CHARSET=x-sjis の宣言はしています。

よろしくお願いいたします。

i18nx 1999/10/12(火) 13:51:12
charCodeAtでユニコード番号を取得すれば良いのでは。

例えば返ってきたコード番号がFF66-FF9Dの範囲なら半角カナと識別出来るはずです。
IE4や5でもcharCodeAtさえサポートしていれば同じように動作するでしょう、多分。

後、下のURLに、同じ仕組みの変換フォームを置いている人がいたと思います。
私には使い方が良く解からなかったのですが、参考になるかもしれないですね。

http://www.cypress.ne.jp/rwreki24/rwss/ware/transform.html

i18nx 1999/10/12(火) 14:15:16
すみません、半角カナの判別方法についてのご質問かと思い込み、そのことばかり書いてしまいました。

> Javascriptで日本語文字を1文字づつ切り出したいのです。
につきましてはよくわかりません。
私の環境(WinNT4、NC4.6)では、substrもcharAtもIEと同じ動作を
しているように思われます。


ただあんまり詳しいわけじゃないので、どなたかフォローお願いします。

Aurai [E-Mail] 1999/10/14(木) 03:43:19
function copy(targetstring,targetindex,targetlength,i,j,k,l){
  l = '漢';
  if (l.length == 2){
    j = 0;
    for (i=0;i<targetindex;i++){
      l = escape(targetstring.substring(j,j+1)).substring(1,2);
      if (l=='8'||l=='9'||l=='E'||l=='F')
        j += 2;
      else
        j += 1;
    }
    k = j;
    for (i=0;i<targetlength;i++){
      l = escape(targetstring.substring(k,k+1)).substring(1,2);
      if (l=='8'||l=='9'||l=='E'||l=='F')
        k += 2;
      else
        k += 1;
    }
  } else {
    j = targetindex;
    k = parseInt(targetindex) + parseInt(targetlength);
  }
  l = targetstring.substring(j,k);
  return l;
}

こんな関数はどうでしょう

Netscapeはいつから2byteコードを一文字と認識するようになったんでしょうか

TAKI 1999/10/14(木) 03:59:15
>Netscapeはいつから2byteコードを一文字と認識するようになったんでしょうか
↓こんな話がありました
../199908/99080051.htm

とびお [E-Mail] 1999/10/14(木) 09:10:43
[[解決]]
i18nxさん、Auraiさん、TAKIさん レスありがとうございます。 とびおです。

Auraiさんのソースで出来ました!!(ちょこっと変えてます)
ブラウザ依存の部分をまず日本語文字でチェックする(変数l)という発想がすごい!
もう感激 感激 ☆★☆

文字の切り出し練習のページを作ったので皆さんもお試しください

本当にありがとうございました

************* ソースはここから ***************
<HTML>
<HEAD>
  <META HTTP-EQUIV="Content-Type"  CONTENT="text/html;CHARSET=x-sjis">
<TITLE>文字の切り出し練習</TITLE>
<SCRIPT LANGUAGE="JavaScript" TYPE="text/javascript">
<!--
function cutLetter(targetstring,targetindex,targetlength){
  var i = 0;
  var j = 0;
  var k = 0;
  var l = '漢';

  var targetstring = document.myform.txt1.value;
  var targetindex = parseInt(document.myform.txt2.value);
  var targetlength = parseInt(document.myform.txt3.value);

  if (l.length == 2){
    j = 0;
    for (i=0;i<targetindex;i++){
      l = escape(targetstring.substring(j,j+1)).substring(1,2);
      if (l=='8'||l=='9'||l=='E'||l=='F')
        j += 2;
      else
        j += 1;
    }
    k = j;
    for (i=0;i<targetlength;i++){
      l = escape(targetstring.substring(k,k+1)).substring(1,2);
      if (l=='8'||l=='9'||l=='E'||l=='F')
        k += 2;
      else
        k += 1;
    }
  } else {
    j = targetindex;
    k = parseInt(targetindex) + parseInt(targetlength);
  }
  l = targetstring.substring(j,k);
  document.myform.txt4.value = l;
  return false;
}
//-->
</SCRIPT>
</HEAD>
<BODY>
<FORM name="myform">
<H1>文字の切り出し練習</H1>
&nbsp;文字列:<INPUT type="text" name="txt1" value="" size=70 maxlength="256"><BR>
&nbsp;切り出し開始位置:<INPUT type="text" name="txt2" value="0" size=5 maxlength=5>&nbsp;
&nbsp;切り出し文字数:<INPUT type="text" name="txt3" value="1" size=5 maxlength=5>
&nbsp;<INPUT type="button" name="btn1" value="実行" onClick="cutLetter()"><BR><BR>
&nbsp;===>&nbsp;切り出し文字列:<INPUT type="text" name="txt4" value="" size=70 maxlength="256">
</FORM>
</BODY>
</HTML>
*************     ここまで     ***************

[上に] [前に] [次に]