入力されていて、なおかつ、入力された文字列が特定のものであるかを判定する方法

[上に] [前に] [次に]
あつし [E-Mail] 1999/12/07(火) 00:30:23
何度もお世話になります。
以前教えていただいたもので、テキストボックス内の特定の文字列が
あるかどうかを判定するjavascriptを教えていただきました。
今回は、それに加えて、同じテキストボックスで、「何かの文字が入力されていて、なおかつ、入力されていた文字列が特定のものだったら、
エラーを返す」ようにするにはどのようにすればいいのでしょうか。
参考に、前回教えていただいたscriptを掲載させていただきます。

<script>
function inputcheck(){
var txt=document.forms[0].mail.value //チェックするエレメント
if(txt.indexOf("@hogehoge.co.jp")==-1){
//指定した文字が含まれるかチェック
alert("@hogehoge.co.jpが含まれていません") //メッセージを表示させる
return false //falseを返せば送信されない
}

J.Naka 1999/12/07(火) 01:13:16
「何かの文字が入力されていて、なおかつ、入力されていた文字列が特定のものだったら、
エラーを返す」
これは、条件Aと条件Bの両方ともに真の場合に何々を実行する。
って事ですね。上の例ではエラーが実行内容ですね。

「両方ともに」というのは、論理積で表せます。二つの判定結果を && で演算すれば良いです。

if( (A == -1) && (B == -1) ){
   document.write("error");
}

ちなみに、JavaScriptの真が -1 であれば、上記の if(A == -1)は if(A)だけで良いことになります。JavaScriptの真と偽って数値としては何だっけ?

あつし 1999/12/07(火) 10:27:20
ご投稿ありがとうございます。
コーディングしてみました。
「入力されていて」というところの書き方が自身がないのですが、
(条件式の前半部分)
こんな感じになるのでしょうか。
mailaddrというテキストボックスに、何かが入力されていて、
なおかつ、@hogeという文字列が入っていなければ、エラーを返す
というものです。
何も入力されていなければ、問題なく処理が進むことを意識しています。

if (document.form1.mailaddr.value== -1) &&
   (document.form1.mailaddr.value.indexOf("@hoge") == -1) {
    alert("メールアドレスは本当に正しいですか?!");
    document.form1.mailaddr.focus();
    return(false);
  }

Mugi [E-Mail] [HomePage] 1999/12/07(火) 11:58:50
空チェックは、
document.form1.mailaddr.value== -1
ではなくて
document.form1.mailaddr.value==""
です。
あの-1はindexOfが文字列が見つからないときに返す値です。

Tmb 1999/12/07(火) 11:59:20
>if (document.form1.mailaddr.value== -1) &&

.value != ""の方がいいのでは。あるいはvalueのlengthが0でないかどうかで判定するか。

>JavaScriptの真と偽
判別式中では0以外が真として扱われたと記憶してます。
むりやり数値化(true-0など)すると,true=1, false=0だったかな?

Tmb 1999/12/07(火) 12:01:03
あ,かぶった。
>value==""

こっちの方が正しかったですね。!=でなくて。

あつし 1999/12/07(火) 12:38:27
ご教授いただき本当に感謝しております。

書き込みを拝見させていただいて、自分自身混乱してきたのですが。(^^ゞ

よくある「未入力だったら」のではくて、
「何か入力されていたら」になるのですが、
document.form1.mailaddr.value==""
これだと未入力だったらにならないでしょうか。

あつし 1999/12/07(火) 12:38:43
ご教授いただき本当に感謝しております。

書き込みを拝見させていただいて、自分自身混乱してきたのですが。(^^ゞ

よくある「未入力だったら」のではくて、
「何か入力されていたら」になるのですが、
document.form1.mailaddr.value==""
これだと未入力だったらにならないでしょうか。

J.Naka 1999/12/07(火) 13:02:57
1.「未入力だったら」
2.「何か入力されていたら」

これの違いは、判定式の結果が反対になるだけということでは。
判定式の後の処理のソース上の順序をどうしたいかによる問題では。
つまり真の処理を先にあるのが良いか偽の処理が先が良いかの問題ではないですか。

あつし 1999/12/07(火) 13:36:58
すいません。どうも私の頭が悪いようです。

考えていたのは、順番としたら、
1.まずテキストボックスに何か入力されているかどうか。
2.入力されていた場合、「@hoge」が入力されているかどうか。
3.上記の2つの条件で、「何か入力されていて」「入力されていた
値に、@hogeがはいっていなければ、再入力を促すというものです。

if(document.form1.mailaddr.valueに何か入っている)
&& (document.form1.mailaddr.valueに@hogeがはいっている)
    alert("メールアドレスは本当に正しいですか?!");
    document.form1.mailaddr.focus();
    return(false);
  }

のようになると思うのですが、違うでしょうか。
(document.form1.mailaddr.valueに何か入っている)
を具体的にコーディングするとどうなるのでしょうか。
J.Naka様がおっしゃっている、「判定式の結果が反対になるだけ」
ということになると思うのですが。

toshi [E-Mail] [HomePage] 1999/12/07(火) 14:00:15
これでいいのでは?


if (document.form1.mailaddr.value== "") ||
   (document.form1.mailaddr.value.indexOf("@hoge") == -1) {
    alert("メールアドレスは本当に正しいですか?!");
    document.form1.mailaddr.focus();
    return false;
  }

Tmb 1999/12/07(火) 14:09:39
あ,そうか。僕も混乱してましたが,最初のであってたんだ。

未入力である/ないは,その値valueが空文字列""であるかどうかを考えますから,
value=="" ならば未入力
value!="" ならば入力されてる
ことになります。

今回の場合,未入力でもalertしないのですよね?
#すなわち,メールアドレスは空欄でもいいけど,間違っていたら警告。

ならば
(value !="")&&(...indexOf(...)==-1)を満たすときにalertすればよい,と。

あつし 1999/12/07(火) 14:16:41
[[解決]]
感動いたしました。(T_T)
動きました。
ご教授下さった皆さん心より感謝いたします。
ただ、&&で結んだとき、全体を()でくくらないと、
うまく動きませんでした。

J.Naka 1999/12/07(火) 15:11:08
あれ?上の判定は最終的に、文字列に "@hoge" が入って無ければ真とすると言う事ですよね。
だとしたら、"@hogke"の前の判定は無意味では?
""ならば、"@hogke"も無いのだから、""の判定は"@hoge"の有無で判定
できる事ですよね。
↓だけで良いのでは?

if(document.form1.mailaddr.value.indexOf("@hoge") == -1){

# &&(and 論理積)にするか ||(or 論理和)にするかは、
#ややこしいところです(^^;

-----------------------------
Tmbさん
>(value !="")&&(...indexOf(...)==-1)を満たすときにalertすればよい,と。
これは、"@hoge"が入ってなくても何か入っていれば、偽になるので希望の処理にはなりませんです。。。。なっややこしいす(^^;

J.Naka 1999/12/07(火) 15:48:00
あつしさん
>ただ、&&で結んだとき、全体を()でくくらないと、
>うまく動きませんでした。

ifの判定式は、ifの直後の左括弧とそれに対する右括弧の間にかかれたものが、そのifの判定式となります。
判定式自体に括弧があっても、if文の判定式とするには全体を括弧で括る必要があります。
仕様、文法というやつです。

#しかし、タイトルをキチっと読めば答えはもっと早期に出ていましたです。いい加減でどもすいません>皆様方

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