0

ユーザー入力から、数字を含む必要がある文字列を受け取ります。0空の文字列は別の方法で処理する必要があります。

この簡単なケーススタディを作成しました

0 == "" // true
parseInt(0) == "" // true
parseInt("") // NaN
parseInt("") == "NaN" // false
parseInt("") == NaN // false
typeof parseInt("") // "number"

少し余分な調査を行って、このソリューションを作成しました(uInputユーザー入力を考慮して)

function userInput(uInput){
var n = parseInt(uInput);
if (isNan(n))
// empty string
else
// 0 or number
}

Google Chrome では 0 と空の文字列を正しく区別できるようです。

私が知りたいのは:

  • これは最善/最も効率的なソリューションですか?
  • このソリューションはどのブラウザーでも互換性がありますか?
  • これはまったく解決策ですか?n数値以外のものになる方法はありますか(uInputあらゆる種類の文字列になる可能性があると考えてください)。

私はこれを尋ねるつもりはありませんが、空の文字列と 0 は同じように扱われるため (?!)、自分のコードが潜在的に公開されている他の穴がどれかわかりません。

4

6 に答える 6

1

私なら、次の===ように試してみます: 0 === ""// false

それらと型変換についての違い:
Q: JavaScript の比較で使用する等号演算子 (== と ===) は関係ありますか?

于 2013-09-27T10:34:07.760 に答える
1

私はこのようなことをします:

var nmbr = parseInt(uInput, 10);
if (!isNaN(nmbr)) {
    // Yay, valid input!
} else {
    // Ups, weird input...
}

parseInt整数または のみを返すNaNため、これは最も単純で最も正しい答えのようです。

于 2013-09-27T10:37:26.367 に答える
0

これを試して:

function validate(uInput){
    var regEx = /^[1-9]{1}[\d]*$/;
    if (regEx.test(uInput))
        alert(uInput + " is a valid number.");
    else
        alert(uInput + " is not valid number.");

    var validNumber = parseInt(uInput);
}
于 2013-09-27T10:47:54.660 に答える
0

これはまったく解決策ですか?n が数値以外になる方法はありますか?

はい。parseInt文字列を解析するときに、文字列の最初の整数部分のみを考慮します。残りは無視されるため、"12.34 oops"として引き続き検証され12ます。

数字を含まなければならない文字列を受け取りました

簡単な正規表現を使用して、次のことをテストできます。

/^\d+$/.test(uInput)

true数字のみ (および少なくとも 1 つ) で構成される文字列とfalse、それ以外のもの (非数値および空の文字列) に対して生成されます。

于 2013-09-27T10:35:45.283 に答える
0

独自のテストを作成します。それぞれに 100 万回の試行を行い、所要時間を取得します。

ブラウザの互換性のために、簡単な操作は似ているはずです。

于 2013-09-27T10:36:52.820 に答える