【初心者向け】JavaScriptで数値チェックのすべて!isNaN(), isFinite(), 正規表現を使いこなそう

2024-06-15

JavaScript で変数が数字か文字列かをチェックする方法

typeof 演算子を使う

最も簡単な方法は、typeof 演算子を使うことです。typeof 演算子は、オペランドの型を返します。

const num = 10;
const str = "Hello";

console.log(typeof num); // "number"
console.log(typeof str); // "string"

isNaN() 関数を使う

isNaN() 関数は、引数が数値でないかどうかを判断します。つまり、数値であるかどうかを判定することができます。

const num = 10;
const str = "Hello";

console.log(isNaN(num)); // false
console.log(isNaN(str)); // true

Number.isFinite() 関数を使う

const num = 10;
const infinity = Infinity;
const str = "Hello";

console.log(Number.isFinite(num)); // true
console.log(Number.isFinite(infinity)); // false
console.log(Number.isFinite(str)); // false

正規表現を使って、文字列が数値かどうかを判定することもできます。

const numStr = "123";
const nonNumStr = "abc";

const numRegex = /^[0-9]+$/;

console.log(numRegex.test(numStr)); // true
console.log(numRegex.test(nonNumStr)); // false

使い分け

  • シンプルな判定であれば、typeof 演算子を使うのが最も簡単です。
  • 文字列が数値に変換できるかどうかを判定したい場合は、isNaN() 関数を使うのが適切です。
  • 無限大や非数を含むかどうかを判定したい場合は、Number.isFinite() 関数を使うのが適切です。
  • より複雑な判定や、細かい条件を設定したい場合は、正規表現を使うのが柔軟です。

補足

  • 上記以外にも、parseInt() 関数や parseFloat() 関数を使って、文字列を数値に変換できるかどうかを試す方法もあります。
  • オブジェクトの場合は、typeof 演算子で "object" と判定されますが、instanceof 演算子を使って Number インスタンスかどうかを判定することもできます。

ぜひ、これらの方法を理解して、状況に合わせて使い分けてみてください。




typeof 演算子を使う

const checkNumOrStr = (value) => {
  if (typeof value === "number") {
    console.log(`${value} は数値です。`);
  } else if (typeof value === "string") {
    console.log(`${value} は文字列です。`);
  } else {
    console.log(`${value} は数値でも文字列でもありません。`);
  }
};

checkNumOrStr(10); // 10 は数値です。
checkNumOrStr("Hello"); // Hello は文字列です。
checkNumOrStr(true); // true は数値でも文字列でもありません。

isNaN() 関数を使う

const checkIsNumber = (value) => {
  if (isNaN(value)) {
    console.log(`${value} は数値ではありません。`);
  } else {
    console.log(`${value} は数値です。`);
  }
};

checkIsNumber(10); // 10 は数値です。
checkIsNumber("Hello"); // Hello は数値ではありません。
checkIsNumber(Infinity); // Infinity は数値ではありません。

Number.isFinite() 関数を使う

const checkIsFiniteNumber = (value) => {
  if (Number.isFinite(value)) {
    console.log(`${value} は有限な数値です。`);
  } else {
    console.log(`${value} は有限な数値ではありません。`);
  }
};

checkIsFiniteNumber(10); // 10 は有限な数値です。
checkIsFiniteNumber("Hello"); // Hello は有限な数値ではありません。
checkIsFiniteNumber(Infinity); // Infinity は有限な数値ではありません。

正規表現を使う

const checkIsNumStr = (value) => {
  const numRegex = /^[0-9]+$/;
  if (numRegex.test(value)) {
    console.log(`${value} は数値を表す文字列です。`);
  } else {
    console.log(`${value} は数値を表す文字列ではありません。`);
  }
};

checkIsNumStr("123"); // 123 は数値を表す文字列です。
checkIsNumStr("abc"); // abc は数値を表す文字列ではありません。
checkIsNumStr("123.45"); // 123.45 は数値を表す文字列です。

これらのサンプルコードは、あくまでも一例です。状況に合わせて、自由に改造して使用してください。




JavaScript で変数が数字か文字列かをチェックするその他の方法

instanceof 演算子を使って、変数が Number インスタンスかどうかを判定することができます。

const num = 10;
const str = "Hello";

console.log(num instanceof Number); // true
console.log(str instanceof Number); // false

isInteger() 関数を使う

isInteger() 関数は、引数が整数かどうかを判断します。これは、Number.isFinite() 関数と似ていますが、小数を含む数値はfalse と判定されます。

const num = 10;
const decimalNum = 10.5;
const str = "Hello";

console.log(isInteger(num)); // true
console.log(isInteger(decimalNum)); // false
console.log(isInteger(str)); // false

正規表現と組み合わせて使う

より複雑な判定を行う場合は、正規表現と組み合わせて使うこともできます。例えば、以下のように、小数点を含む数値かどうかを判定することができます。

const numStr = "123.45";
const nonNumStr = "abc";

const numRegex = /^\d+(\.\d+)?$/;

console.log(numRegex.test(numStr)); // true
console.log(numRegex.test(nonNumStr)); // false

カスタム関数を作る

上記のいずれの方法でも十分でない場合は、カスタム関数を作ることもできます。例えば、以下のように、特定の条件に合致するかどうかを判定する関数を作ることができます。

const checkNumOrStr = (value) => {
  if (typeof value === "number") {
    return true;
  } else if (typeof value === "string") {
    const numRegex = /^\d+(\.\d+)?$/;
    return numRegex.test(value);
  } else {
    return false;
  }
};

const num = 10;
const str = "123.45";
const nonNumStr = "abc";

console.log(checkNumOrStr(num)); // true
console.log(checkNumOrStr(str)); // true
console.log(checkNumOrStr(nonNumStr)); // false

JavaScript で変数が数字か文字列かをチェックする方法は様々です。状況に合わせて、適切な方法を選択してください。


    javascript types


    ExpressでPOSTフォームフィールドにアクセスする:2つの主要な方法とその他のオプション

    Express は、リクエストされたフォーム データを req. body オブジェクトに格納します。このオブジェクトは、キーと値のペアの JavaScript オブジェクトです。キーはフォーム フィールドの名前、値はユーザーが入力した値です。...


    JavaScriptでネストされたデータ構造をマスター! オブジェクト、配列、JSONへのアクセスと処理を徹底解説

    そこで、このガイドでは、JavaScriptにおけるネストされたオブジェクト、配列、JSONへのアクセスと処理について分かりやすく解説します。オブジェクトは、キーと値のペアの集合で構成されます。キーは文字列であり、値は任意のデータ型 (数値、文字列、ブール値、他のオブジェクト、配列など) になることができます。...


    JavaScriptとReactで直面する「Reactコンポーネントが状態変更で再レンダリングされない問題」:解決策と回避策

    この問題には、主に以下の3つの原因が考えられます。状態の参照渡し: setState メソッドでオブジェクトを直接更新する場合、Reactはオブジェクトが同じであるとみなして再レンダリングをスキップしてしまう可能性があります。不要な再レンダリング: すべてのコンポーネントが毎回再レンダリングされると、パフォーマンスが低下します。...


    TypeScript 型とインターフェースの違いを理解する

    型型は、変数や関数の値の制約を定義するために使用されます。プリミティブ型 (例: number、string、boolean)、ユニオン型、タプル型、ジェネリック型など、さまざまな型があります。型エイリアスを使用して、既存の型の別名を作成することもできます。...


    SQL SQL SQL SQL Amazon で見る



    【中級者向け】JavaScriptで小数点数を精緻に検証:IsNumeric() 関数の限界を超える

    JavaScriptで入力された値が小数点数かどうかを検証する方法はいくつかありますが、ここでは IsNumeric() 関数を使った方法を紹介します。IsNumeric() 関数は、引数として渡された値が数値かどうかを判定し、数値であれば true、そうでなければ false を返します。


    JavaScriptで関数型プログラミング:Underscore.js、Lodash、そしてその他の方法

    Underscore. jsとLodashは、JavaScriptで利用できる人気のライブラリであり、どちらも関数型プログラミングスタイルを促進し、コードの簡潔化と効率化に役立ちます。歴史Underscore. jsは2009年にリリースされ、JavaScriptにおける関数型プログラミングの先駆けとなりました。その後、2010年にLodashが誕生し、Underscore