私は、入力された値が数値であるかどうかを確認functionto ISNANを使用しています:JavaScriptの関数isnan
if(isNaN(num)) {
alert('I am not a number');
}
else {
//
}
ただし、入力された値は、それが数などの理解とfalse
を返す「5748hh」、例えば、ある場合。なにが問題ですか?
私は、入力された値が数値であるかどうかを確認functionto ISNANを使用しています:JavaScriptの関数isnan
if(isNaN(num)) {
alert('I am not a number');
}
else {
//
}
ただし、入力された値は、それが数などの理解とfalse
を返す「5748hh」、例えば、ある場合。なにが問題ですか?
ますisNaN関数の引数が数値でない場合、値は、最初の数字に強制されます。結果の値は、NaNかどうかを調べるためにテストされます。したがって、非数値の場合、数値型に変換されたときに有効なNaN以外の数値(特に空の文字列とブール値のプリミティブ)が返されますが、強制的に数値に0または1を指定すると、 "false"たとえば、空の文字列は、必ず「数字ではありません」。混乱は、「数字ではない」という用語がIEEE-794浮動小数点値として表される数値に特定の意味を持つという事実に由来します。この関数は、「この値は強制的に数値に変換されるのではなく、IEEE-794の数値ではない」という質問に答えて解釈されるべきです。
したがってalert(isNaN('45345ll'))
は、値の強制がparseInt/parseFloat
の変換と異なるため、trueを返します。
それがtrueを返した場合、入力されたデータが数値ではありませんので
var num = false;
console.log(isNaN(num)); /* return false because the coerced value is 0 but */
console.log(parseInt(num, 10)); /* return isNaN */
たぶん、あなたが原因あなたのif
声明
あなたが最初にそれを解析しようとする必要があります。
if(isNaN(parseInt(num, 10))) {
documentationによると:
ますisNaN関数仕様の非常に最初のバージョン以来、非数値の引数のためにその動作がされています混乱する。 isNaN関数への引数が数値でない場合、値は最初に数値に強制的に引き継がれます。結果の値は、NaNかどうかを調べるためにテストされます。従って、非数値の強制この
parseInt()
異なり有効な非NaNの数値(数値を0または1を与える強制特に空の文字列とブールプリミティブ)の数値型の結果に強制
その数字に変更すると、5748hh
のような文字列ではない番号となり、したがって表示される動作になります。
isNaN("5748hh");
true
を返します。
を参照してください。
>>> isNaN("5748hh")
true
あなたはそれが成功した数に解析する数字で始まる文字列を解析する場合、無視された文字列の残りの部分で。例えばparseInt('56sadfh', 10)
は、56
に解析されます。これを防ぐには、正規表現を使用して入力を確認する必要があります。例えば
if (!num.match(/[0-9]+/)) {
alert("not a number");
}
ますisNaN =で行方不明括弧に予期しない値を取得するには、番号ではありません。真
if(isNaN("5748hh"))
{
alert("not a number");
}
else
{
alert("a number");
}
戻り値: "数ではなく"、それが必要のように。
NaNは特別な番号です。 isNaN(引数)関数は引数がNaN値であるかどうかをチェックしますが、引数が有効な整数を表す文字列の場合はtrueを返します。
この例ではかっこを正しく閉じなければなりません:) numの後ろには閉じ方がありません)。 – Eirinn
isNaN( "5748hh")=== true; '何がうまくいかないのですか? – Raynos