読み込み中...

JavaScriptで数値チェックをマスター!7つの方法とサンプルコード

JavaScriptで数値チェックを行うイメージ JS
この記事は約13分で読めます。

【サイト内のコードはご自由に個人利用・商用利用いただけます】

この記事では、プログラムの基礎知識を前提に話を進めています。

説明のためのコードや、サンプルコードもありますので、もちろん初心者でも理解できるように表現してあります。

本記事のサンプルコードを活用して機能追加、目的を達成できるように作ってありますので、是非ご活用ください。

※この記事は、一般的にプロフェッショナルの指標とされる『実務経験10,000時間以上』を満たす現役のプログラマチームによって監修されています。

※Japanシーモアは、常に解説内容のわかりやすさや記事の品質に注力しております。不具合、分かりにくい説明や不適切な表現、動かないコードなど気になることがございましたら、記事の品質向上の為にお問い合わせフォームにてご共有いただけますと幸いです。
(送信された情報は、プライバシーポリシーのもと、厳正に取扱い、処分させていただきます。)

はじめに

JavaScriptを使用して数値チェックを行う方法を詳しく解説いたします。

この記事を通して、初心者の方でも数値チェックの手法をマスターできるようになります。

実用的なサンプルコードと共に、応用例や注意点、そしてカスタマイズの手法まで網羅的に紹介していきます。

数値チェックは、プログラミングにおいて非常に重要な技術であり、この記事を読むことで、皆様のスキルアップにつながることでしょう。

●数値チェックとは

数値チェックとは、入力されたデータが数値であるか否かを確認するプロセスです。

ウェブアプリケーションやシステム開発において、フォームからの入力値の検証や、データ処理の前段階として頻繁に用いられます。

不適切なデータがシステムに入り込むことを防ぎ、プログラムの安定性と信頼性を高める上で、数値チェックは極めて重要な役割を果たします。

●JavaScriptでの数値チェック方法

JavaScriptには、数値チェックを行うための多様な方法が存在します。

ここでは、7つの代表的な手法とそれぞれのサンプルコードを詳細に解説していきます。

各手法の特徴や使用場面を理解することで、適切な方法を選択できるようになります。

○方法1:isNaN()関数を使う

isNaN()関数は、引数がNaN(Not-a-Number)であるかどうかを判定します。

この関数は、JavaScriptの組み込み関数の一つで、使い方がシンプルであることが特徴です。

const value = "123";
const isNumber = !isNaN(value);
console.log(isNumber); // true

この方法では、isNaN()関数の結果を否定することで、数値であるかどうかを判定しています。

文字列型の数値も正しく判定できる点が利点です。

○方法2:正規表現を使う

正規表現を用いた数値チェックは、より細かい条件設定が可能です。

数字のみで構成されているかどうかを厳密にチェックできます。

const value = "123";
const isNumber = /^\d+$/.test(value);
console.log(isNumber); // true

この正規表現 /^\d+$/ は、文字列全体が1つ以上の数字で構成されていることを意味します。

小数点や符号を含む数値の判定には、正規表現を適宜調整する必要があります。

○方法3:Number()関数を使う

Number()関数は、引数を数値型に変換しようとします。

変換できない場合はNaNを返すため、この性質を利用して数値チェックを行うことができます。

const value = "123";
const isNumber = !isNaN(Number(value));
console.log(isNumber); // true

この方法は、文字列型の数値を数値型に変換できるかどうかを確認することで、数値判定を行っています。

小数点を含む数値や、科学的表記法の数値も正しく判定できる利点があります。

○方法4:parseInt()とparseFloat()を使う

parseInt()とparseFloat()は、それぞれ整数と浮動小数点数への変換を試みる関数です。

この関数を使用することで、より具体的な数値タイプのチェックが可能になります。

const value = "123";
const isNumber = !isNaN(parseInt(value));
console.log(isNumber); // true

parseFloat()を使用する場合、小数点を含む数値も正しく判定できます。

ただし、文字列の先頭が数値でない場合、NaNを返すため注意が必要です。

○方法5:typeof演算子を使う

typeof演算子は、変数の型を判定するJavaScriptの組み込み演算子です。

数値型かどうかを直接チェックすることができます。

const value = 123;
const isNumber = typeof value === "number";
console.log(isNumber); // true

この方法は、変数が純粋な数値型であるかどうかを判定するのに適しています。

ただし、文字列型の数値は「false」と判定されるため、用途に応じて使い分ける必要があります。

○方法6:自作関数を作成する

独自の数値チェック関数を作成することで、プロジェクトの要件に合わせたカスタマイズが可能になります。

複数の判定方法を組み合わせることで、より精密な数値チェックを実現できます。

function isNumber(value) {
  return typeof value === "number" && !isNaN(value);
}

const value = 123;
console.log(isNumber(value)); // true

この自作関数では、typeof演算子とisNaN()関数を組み合わせることで、より厳密な数値判定を行っています。

NaNも数値型と判定されるため、isNaN()でのチェックも併せて行っています。

○方法7:ライブラリを利用する

外部ライブラリを活用することで、より高度で安定した数値チェックが可能になります。

ここでは、広く使用されているlodashライブラリを例に挙げます。

import _ from 'lodash';

const value = "123";
const isNumber = _.isNumber(parseFloat(value));
console.log(isNumber); // true

lodashの_.isNumber()メソッドは、より厳密な数値判定を行います。

parseFloat()と組み合わせることで、文字列型の数値も正しく判定できます。

●応用例とサンプルコード

数値チェックの基本を理解したところで、実践的な応用例を見ていきましょう。

ここでは、3つの具体的なシナリオとそれぞれのサンプルコードを紹介します。

この例を参考にすることで、実際のプロジェクトでの活用方法がイメージしやすくなるでしょう。

○応用例1:フォーム入力値のバリデーション

ウェブフォームで入力された値が数値であることを確認し、適切なエラーメッセージを表示する例です。

ユーザー体験を向上させるため、リアルタイムでのバリデーションを実装しています。

function validateNumberInput(input) {
  if (isNaN(input.value)) {
    input.setCustomValidity('数値を入力してください。');
  } else {
    input.setCustomValidity('');
  }
}

const numberInput = document.getElementById('numberInput');
numberInput.addEventListener('input', () => {
  validateNumberInput(numberInput);
});

このコードでは、入力フィールドの値が変更されるたびにvalidateNumberInput関数が呼び出されます。

数値以外が入力された場合、カスタムバリデーションメッセージが設定されます。

○応用例2:ユーザー入力値を元にグラフを描画

ユーザーが入力した複数の数値を基にグラフを描画する例です。

入力値が全て数値であることを確認してから処理を進めることで、エラーを防止しています。

function drawGraph(data) {
  // グラフ描画処理(ここでは省略)
  console.log('グラフを描画しました:', data);
}

const graphData = [10, 20, 30];
if (graphData.every(value => !isNaN(value))) {
  drawGraph(graphData);
} else {
  console.error('数値以外のデータが含まれています。');
}

この例では、everyメソッドを使用して配列内の全ての値が数値であることを確認しています。

データが有効な場合のみグラフ描画処理が実行されます。

○応用例3:数値を範囲に応じて処理を振り分ける

入力された数値の大きさに応じて、異なる処理を行う例です。

この手法は、ゲームのスコア計算や成績評価システムなどで活用できます。

function processNumber(value) {
  if (!isNaN(value)) {
    if (value < 10) {
      console.log('10未満です。初級者レベルです。');
    } else if (value < 20) {
      console.log('10以上20未満です。中級者レベルです。');
    } else {
      console.log('20以上です。上級者レベルです。');
    }
  } else {
    console.error('数値を入力してください。評価できません。');
  }
}

const inputValue = 15;
processNumber(inputValue);

この関数は、まず入力値が数値であることを確認し、その後で値の範囲に応じて異なるメッセージを出力します。

数値以外が入力された場合はエラーメッセージを表示します。

●注意点と対処法

数値チェックを行う際には、いくつかの注意点があります。

これを理解し、適切に対処することで、より信頼性の高いコードを書くことができます。

○注意点1:文字列と数値の混在

JavaScriptでは、文字列型の数値と数値型を区別する必要があります。

例えば、フォームからの入力値は常に文字列型です。

対処法として、parseInt()やparseFloat()を使用して、明示的に数値型に変換してからチェックを行います。

const userInput = "42";
const numericValue = parseFloat(userInput);
if (!isNaN(numericValue)) {
  console.log('有効な数値です:', numericValue);
} else {
  console.log('無効な入力です');
}

○注意点2:浮動小数点数の扱い

JavaScriptにおける浮動小数点数の計算は、時として予期せぬ結果を生むことがあります。

対処法として、浮動小数点数を扱う場合は、parseFloat()を使用し、必要に応じて小数点以下の桁数を制限します。

const floatInput = "3.14159";
const floatValue = parseFloat(floatInput);
if (!isNaN(floatValue)) {
  console.log('有効な浮動小数点数です:', floatValue.toFixed(2));
} else {
  console.log('無効な入力です');
}

○注意点3:数値が大きすぎる場合

JavaScriptには、扱える数値の上限と下限があります。

対処法として、Number.MAX_SAFE_INTEGERとNumber.MIN_SAFE_INTEGERを使用して、安全な範囲内であるかチェックします。

function isSafeNumber(value) {
  return Number.isSafeInteger(value) &&
         value >= Number.MIN_SAFE_INTEGER &&
         value <= Number.MAX_SAFE_INTEGER;
}

console.log(isSafeNumber(9007199254740991)); // true
console.log(isSafeNumber(9007199254740992)); // false(安全な整数の上限を超えている)

この注意点を念頭に置きながら数値チェックを行うことで、より堅牢なプログラムを作成することができます。

●カスタマイズ方法

プロジェクトの要件に応じて、数値チェックをカスタマイズする場合があります。

ここでは、よくあるカスタマイズ方法とそのサンプルコードを紹介します。

○数値の範囲指定

特定の範囲内の数値のみを有効とする場合、次のような関数を作成できます。

function isInRange(value, min, max) {
  const numValue = parseFloat(value);
  return !isNaN(numValue) && numValue >= min && numValue <= max;
}

const inputValue = 15;
const min = 10;
const max = 20;
console.log(isInRange(inputValue, min, max)); // true
console.log(isInRange(25, min, max)); // false

この関数は、入力値が指定された最小値以上、最大値以下であるかをチェックします。

例えば、年齢入力や評価スコアの検証などに活用できます。

○複数の条件を組み合わせる

より複雑な条件を設定したい場合、複数のチェックを組み合わせることができます。

function isValidNumber(value) {
  const numValue = parseFloat(value);
  return !isNaN(numValue) &&
         numValue >= 0 &&
         numValue <= 100 &&
         Number.isInteger(numValue);
}

console.log(isValidNumber(15)); // true
console.log(isValidNumber(150)); // false(範囲外)
console.log(isValidNumber(3.14)); // false(整数でない)

この関数は、入力値が0以上100以下の整数であることをチェックします。

例えば、パーセンテージの入力や、100点満点のテストスコアの検証などに使用できます。

○オプションを利用する

より柔軟な数値チェックを行うために、オプションを受け取る関数を作成することができます。

function isNumberWithOptions(value, options = {}) {
  const numValue = parseFloat(value);
  if (isNaN(numValue)) {
    return false;
  }

  if (options.integer && !Number.isInteger(numValue)) {
    return false;
  }

  if (options.min !== undefined && numValue < options.min) {
    return false;
  }

  if (options.max !== undefined && numValue > options.max) {
    return false;
  }

  return true;
}

const inputValue = 15;
const options = { integer: true, min: 0, max: 100 };
console.log(isNumberWithOptions(inputValue, options)); // true
console.log(isNumberWithOptions(3.14, options)); // false(整数でない)
console.log(isNumberWithOptions(150, options)); // false(範囲外)

このカスタマイズ関数では、整数のみを許可するか、最小値・最大値の制限を設けるかなどをオプションで指定できます。

これで、様々なシナリオに対応できる柔軟な数値チェックが可能になります。

まとめ

本記事では、JavaScriptにおける数値チェックの方法を詳細に解説しました。

基本的な手法から応用例、注意点、そしてカスタマイズ方法まで幅広く紹介しました。

この知識を活用することで、より堅牢で信頼性の高いプログラムを作成することができるでしょう。

また、JavaScriptの進化に伴い、新しい方法や最適化された手法が登場する可能性もあります。

常に最新の情報をキャッチアップし、より効率的で安全なコードを書くことを心がけましょう。

皆様のプログラミングスキルの向上と、より良いソフトウェア開発につながることを願っています。