prompt()の値を的確に取得するには?

[上に] [前に] [次に]
YAC 2000/05/25(木) 18:58:36
はじめまして。
いきなりの質問で恐縮なのですが、ご教授ください。
普段はWindows95上の IE5.0 と NN4.6 で作業しています。
JavaScriptのプロンプトで名前を入力してもらい、その名前でメッセージを振り分けようと・・・

// ---振り分けたい名前が「あいう」さんの場合

    var name = prompt('お名前','');
        if(name == "あいう"){ document.write('こんにちは。'); }
        else{ document.write('はじめまして。'); }

というのを作って、試しに「あいう」と打ち込んでみたのですが、IEでは「はじめまして。」と
出てしまいました。全角のみこうなる様で、半角カナ、英数では単純比較でも問題ありませんでした。

    alert(escape(name));

としてみたところ、「%u3042%u3044%u3046%u3048%u304A%00%00H%00%00」と、入力文字数分のゴミ(?)
の値が含まれていました。(IE5.0)
そこで、

// ---( 1 )
    ccc = name.substring(0,("あいう".length));
        if(ccc == "あいう"){ document.write('こんにちは。'); }
        else { document.write('はじめまして。'); }

// ---( 2 )
        if(!name.indexOf("あいう",0)){ document.write('こんにちは。'); }
        else{document.write('はじめまして。'); }

というのを作って、試しに「あいう」と打ち込んでみると「こんにちは」と出るのですが、
今度は「あいうえお」と打ち込んでも「こんにちは」と出てしまい、意図した様に動いてくれません。
的確に判断させる方法はないものでしょうか。

何卒、宜しくお願い致します。

YAC 2000/05/25(木) 19:59:05
> alert(escape(name));
> としてみたところ、「%u3042%u3044%u3046%u3048%u304A%00%00H%00%00」と、入力文字数分のゴミ(?)

「あいう」は「%u3042%u3044%u3046%00%00%00 」の誤りでした。
後方の「%00%00%00」が余計なんです。

Midori 2000/05/25(木) 21:09:22
はじめまして、Midoriです。
もっと良い方法があるかもしれませんが、これで出来るような気がします。

function StrComp(str1,str2) {
   for (i=0;i<str1.length;i++) {
  if (str1.charCodeAt(i)==0) break;
  if (str1.charCodeAt(i)!=str2.charCodeAt(i)) return false;
   }
   return true;
}

var name = prompt('お名前','');
if(StrComp(name,"あいう")){ document.write('こんにちは。'); }
else{ document.write('はじめまして。'); }

YAC 2000/05/25(木) 21:48:48
[[解決]]
関数、例題共ご用意して頂いて大変感激しています。
返信ありがとうございました。

Midori 2000/05/26(金) 10:12:21
もっと良い方法を見つけました。
以下に記述します。

function StrComp(str1,str2) {
   if (!str1) return false;
   for (i=0;i<str1.length;i++) {
      if (escape(str1.charAt(i))=='%00') break;
      if (str1.charAt(i)!=str2.charAt(i)) return false;
   }
   return true;
}

改良点
・IE3,NN3にも対応(前のはIE4,NC4以上)
・何も入力がないとき
・キャンセルが押されたとき

YAC 2000/05/26(金) 19:20:24
2つ目にご用意頂いたタイプなんですが、プロンプトの戻り値のゴミは
「%00」とは限らない様なんです。「あいう」と打ち込んだ時はたまたまだった様で・・・。
ですので、最初に提示して頂いたタイプを以下のようにして使用しようと思います。

function StrComp(str1,str2,str3) {
str3 = "";
for (i = 0; i < str1.length; i++) {
if (str1.charCodeAt(i) == 0) break;
if (str1.charCodeAt(i) != str2.charCodeAt(i))  return false;
str3 += str1.charAt(i);
}
if(!str3.indexOf(str2,0)) return (str3);
else return false;
}

これだと、キャンセルされた時等は別に処理してやらないといけませんが、比較元の
「あいう」以外(長い「あいうえお」や短い「あい」)はハネて、trueの時は戻り値
として「あいう」を返してくれるので、代入する事により使いまわしが出来そうです。

var name = prompt('お名前','');
var aiu ="";
if(aiu = StrComp(name,"あいう")){ document.write(aiu,'さん、こんにちは。'); }
else{ document.write('はじめまして。'); }

いずれにせよ、ご提示頂かなければこういう発想は出て来ませんでした。
いろいろ考えてくださってありがとうございます。
また何かございましたら宜しくお願い致します。

Midori 2000/05/29(月) 09:15:37
こちらこそ良い勉強になりました。
ありがとうございました。

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