web-dev-qa-db-ja.com

入力が数字または文字のJavaScriptかどうかを確認してください

私はHTMLとJavaScriptでフォームを使っています。ユーザーがLETTERを入力してsubmitをクリックした場合にのみ警告が表示されるようにします。

だから私はHTMLコードがあります:

<form name="myForm" action="" onsubmit="return checkInp()" method="post">
    First name: <input type="text" name="age">
<input type="submit" value="Submit">   

そしてJavaScriptコード:

function checkInp()
{
var x=document.forms["myForm"]["age"].value;
if (x consists of any letters) // this is the code I need to change
{
alert("Must input numbers");
return false;
}
}
61
Greg Peckory

IsNaN関数を使用して、値が数値に変換されないかどうかを判断できます。以下の例

function checkInp()
{
  var x=document.forms["myForm"]["age"].value;
  if (isNaN(x)) 
  {
    alert("Must input numbers");
    return false;
  }
}
99
Bat_Programmer

文字のみを照合する場合は、 正規表現 を使用してください。ある数の数字であることを確認するなど、もっと複雑なことをする必要がある場合は、知識を持っておくのもいいでしょう。

function checkInp()
{
    var x=document.forms["myForm"]["age"].value;
    var regex=/^[a-zA-Z]+$/;
    if (!x.match(regex))
    {
        alert("Must input string");
        return false;
    }
}

さらに良いのは、数字以外のことを否定することです。

function checkInp()
{
    var x=document.forms["myForm"]["age"].value;
    var regex=/^[0-9]+$/;
    if (x.match(regex))
    {
        alert("Must input numbers");
        return false;
    }
}
24
Kim Kling

isNaN 関数を使うことができます。データが数値でない場合はtrueを返します。それはそのようなものでしょう:

function checkInp()
{
    var x=document.forms["myForm"]["age"].value;
    if (isNaN(x)) // this is the code I need to change
    {
        alert("Must input numbers");
        return false;
    }
}

注:isNanは10.2を有効な数値と見なします。

10
mael

あなたはisNaN()を使うことができます。データが数値でない場合はtrueを返します。

var data = 'hello there';
if(isNaN(data)){
  alert("it is not number");
}else {
  alert("its a valid number");
}
4
Deepak Gangore

1で割って余り、つまりx%1を見つけてください。剰余が0の場合は、xが整数であることを意味します。それ以外の場合は、「番号を入力してください」というメッセージを表示する必要があります。これは文字列、10進数などの場合でも機能します。

function checkInp()
{
    var x = document.forms["myForm"]["age"].value;
    if ((x%1) != 0) 
    {
        alert("Must input numbers");
        return false;
    }
}
4
Crypters

これを試して:

if(parseInt("0"+x, 10) > 0){/* x is integer */}
3
Masoud Nazari

私はこの記事が古いことは知っていますが、検索したときに最初に表示されたものです。私は@Kim Kling RegExpを試しましたが惨めに失敗しました。また、このフォーラムを見つける前に、ここにリストされている他のほとんどすべてのバリエーションを試してみました。結局、私が作成したもの以外は機能しませんでした。それはうまく働きます、そしてそれはes6です:

    let regex = new RegExp(/[^0-9]/, 'g');
    let x = document.forms["myForm"]["age"].value;

    if (x.match(regex)) {
       alert("Must be a valid number");
            return
    }
2
str8up7od
function isNumber(data){
    data = data +"e1";                      // Disallow eng. notation "10e2"+"e1" is NaN
    var clean = parseFloat(data,10) / data ; // 1 if parsed cleanly
    return ( data==0 || clean && (data/data) === 1.0);  // Checks for NaN
}

function isInteger(data){
    data = data +"e1";                      // Disallow eng. notation "10e2"+"e1" is NaN
    var clean = parseInt(data,10) / data ; // 1 if parsed cleanly
    return (data==0 ||clean && (data%1) === 0);          // Checks For integer and NaN
}

//Expected pass
console.log(isNumber("0"))
console.log(isNumber("-0.0"))
console.log(isNumber("+0.0"))
console.log(isNumber(0))
console.log(isNumber(-0.0))
console.log(isNumber(+0.0))
console.log(isNumber(1))
console.log(isNumber(-10.0))
console.log(isNumber(+1000.000001))
console.log(isNumber(1))
console.log(isNumber(-10.0))
console.log(isNumber(+1000.000001))

//Expected fail
console.log(isNumber("FF"))
console.log(isNumber("1e1"))
console.log(isNumber("seven"))
1
visibleman

より良い(エラーのない)コードは以下のようになります。

function isReallyNumber(data) {
    return typeof data === 'number' && !isNaN(data);
}

これは空の文字列も処理します。 isNaN("12")falseと同じですが、"12"は数値ではなく文字列なので、trueになるはずです。最後に、 ボーナスリンク あなたの興味を引くかもしれません。

1
Ram Patra

一番簡単なのは、文字列でNumberオブジェクトを作成し、isIntegerクラス自身が提供するNumber関数を使用して確認することです。

Number.isInteger(Number('1')) //true
Number.isInteger(Number('1 mango')) //false
Number.isInteger(Number(1)) //true
Number.isInteger(Number(1.9)) //false
1
Vikas Bansal

あなたが文字列からの数ではなく実数を気にするなら、最善かつ現代的な方法はtypeof(変数)です。例えば:

var a = 1;
var b = '1';

typeof a: // Output: "number"
typeof b: // Output: "string
0
user8621657