1

このサイトのいくつかの回答のおかげで、javascript でプロンプト内の整数を検証する関数を作成しました。isNaNニーズを満たすために使用方法と結果を見つけました%が、まだ機能していないため、何か問題があるに違いありません: この検証用の関数は整数のみを受け入れる必要があり、追加のボーナスとして、後でプログラムで別の目的に使用される特別なキーワード。

したがって、以前は次のように定義していました。

var value = prompt("Type an integer");

その後、検証関数を呼び出しましたが、これには 3 つの条件が含まれていました。次の場合に検証警告がジャンプします。

1) 文字列は数値ではありません

2) 文字列 % 1 は 0 ではありません (整数ではないことを意味します)

3) 文字列は、入力としても有効な特別なキーワード ("extra") ではありません。

関数は、有効なデータが書き込まれるまでループしてプロンプトを表示し続ける必要があります。

while (isNaN(value) == true && value % 1 != 0 && value != "extra") {
    alert("Please, type an integer");
    var value = prompt("Type an integer");
}

私は何を間違っていますか?アイデアをありがとうございました。ここで整数の検証が何度も尋ねられたことは知っています。ここでいくつかのアイデアが得られましたが、何かが欠けている可能性があります...

4

4 に答える 4

1

物事を複雑にしすぎている可能性があります...簡単な正規表現でうまくいきます。

while (!/^(\d+|extra)$/i.test(value)) {
  ...
}
于 2012-10-07T22:14:54.337 に答える
1

に等しいものを 1 つだけ入力しました

isNaN(value) = true
于 2012-10-07T22:20:33.623 に答える
0

私はあなたの目的のために@elclanrsの答えがあなたがここで必要とするすべてであり、最も単純で最も簡単であると思います、しかし完全性と疑わしい笑いのためだけに、私は以下もあなたが探していることをするだろうと確信しています:

function isAnIntOrExtra(v) {
  if (parseInt(+v) === +v && v !== '') {
    return parseInt(+v);
  }
  else if (v === 'extra') {
    return v;
  }
  else {
    return false;
  }
}

ここでフィドル

これらはすべて、10進表記の整数を渡して返す必要があります。

  • 「387」は戻ります387
  • '-4'は-4
  • 「0」は戻ります0
  • 「2.4e3」は2400
  • '0xf4'は244

これらはすべて失敗するはずですが:

  • 「4.5」は戻りますfalse
  • 「2.4e-3」はfalse
  • '0xgc'はfalse
  • '' 戻り値false
  • 'seven'はfalse

そして、魔法の言葉「extra」は'extra'

もちろん、「1,345」のような値で惨めに「失敗」し、おそらく8進表記をロールオーバーして、10進表記であるかのように扱います(JavaScriptエンジンによって異なりますか?)が、処理するように調整することができます。これらの状況も同様ですが、実際には、正規表現を使用したほうがよいでしょう。

于 2012-10-08T04:24:21.123 に答える
0

jsFiddle の

    var int = 10;
var str = "10";

var isInt = function(value) {
    return (str === 'extra' || !isNaN(parseInt(value, 16)) || /^\d+$/.test(value));
};

var isIntStrict = function(value) {
    return (isInt(value) && typeof value !== 'string');
}

console.log('false', isInt('kirk'));
console.log('true', isInt(int));
console.log('true', isInt(str));
console.log('true', 'strict - int', isIntStrict(int));
console.log('false','strict - string', isIntStrict(str));
console.log('false','strict - string', isIntStrict('0x04'));
console.log('true','strict - string', isIntStrict(0x04));
于 2012-10-07T22:20:22.530 に答える