JavaScriptで「isNaN関数」と「正規表現」を使いこなして文字列の有効性を検証

2024-04-05

JavaScript で文字列が有効な数値かどうかを確認する方法

Web 開発において、ユーザー入力の値を検証することは非常に重要です。特に、数値入力を扱う場合、誤った入力がアプリケーションの動作に悪影響を及ぼす可能性があります。

そこで今回は、JavaScript で "文字列が有効な数値かどうか" を検証する方法について、分かりやすく解説します。

方法

JavaScript で文字列が有効な数値かどうかを確認するには、主に以下の 2 つの方法があります。

isNaN() 関数を使用する

isNaN() 関数は、"Is Not a Number" の略であり、引数が数値でない場合に true を返し、数値の場合は false を返します。

function isNumeric(numStr) {
  return !isNaN(numStr);
}

上記のコード例では、isNumeric() 関数に文字列 numStr を引数として渡しています。

この関数は、isNaN() 関数を使用して numStr が数値でないかどうかを判断し、数値でない場合は true を返し、数値の場合は false を返します。

正規表現を使用する

正規表現は、文字列のパターンを記述するための強力なツールです。

数値かどうかを判定する正規表現は以下の通りです。

const regex = /^\d+$/;

この正規表現は、以下の条件を満たす文字列にマッチします。

  • 最初と最後の文字が数字である
  • 数字以外の文字を含まない

上記の正規表現を使用して、文字列が有効な数値かどうかを確認するコード例は以下の通りです。

function isNumeric(numStr) {
  const regex = /^\d+$/;
  return regex.test(numStr);
}

このコード例では、regex.test(numStr) メソッドを使用して、正規表現 regex が文字列 numStr にマッチするかどうかを判断しています。

マッチする場合 (true) は、numStr が有効な数値であることを意味します。

上記で紹介した 2 つの方法にはそれぞれ利点と欠点があります。

  • 利点:
  • 欠点:
    • 浮動小数点数を厳密に区別できない
    • マイナス記号 (-) を含む数値を正しく判定できない
  • 欠点:

一般的には、シンプルで分かりやすい isNaN() 関数を使用するのがおすすめです。

ただし、浮動小数点数を厳密に区別する必要がある場合や、マイナス記号を含む数値を正しく判定する必要がある場合は、正規表現を使用する必要があります。

それぞれの方法の利点と欠点を理解した上で、状況に応じて適切な方法を選択してください。




function isNumeric(numStr) {
  if (numStr === '') {
    return false;
  }
  return !isNaN(numStr);
}

const inputStr = '123';
if (isNumeric(inputStr)) {
  console.log(inputStr + ' は有効な数値です。');
} else {
  console.log(inputStr + ' は有効な数値ではありません。');
}

このコード例では、まず if 文を使用して、入力文字列が空かどうかをチェックしています。

空の場合は、数値ではないと判断し、false を返します。

空でない場合は、!isNaN(numStr) を使用して、numStr が数値かどうかを判断しています。

!isNaN(numStr) は、isNaN(numStr) の結果を反転します。

つまり、isNaN(numStr)true (数値ではない) の場合は false を返し、isNaN(numStr)false (数値である) の場合は true を返します。

function isNumeric(numStr) {
  const regex = /^\d+$/;
  return regex.test(numStr);
}

const inputStr = '123.45';
if (isNumeric(inputStr)) {
  console.log(inputStr + ' は有効な数値です。');
} else {
  console.log(inputStr + ' は有効な数値ではありません。');
}

このコード例では、まず正規表現 regex を定義しています。

補足

上記のサンプルコードは、あくまでも基本的な例です。

実際の開発では、状況に応じてコードをカスタマイズする必要があります。

例えば、以下のような機能を追加することができます。

  • 小数点を含む数値かどうかを判定する
  • 特定の桁数以下の数値かどうかを判定する

ご参考になりましたでしょうか?




JavaScript で文字列が有効な数値かどうかを確認するその他の方法

parseInt() 関数と isFinite() 関数を使用する

parseInt() 関数は、文字列の先頭から整数を解析し、10 進数の整数値を返します。

isFinite() 関数は、引数が有限な数値かどうかを判断し、有限な数値の場合は true を返し、そうでない場合は false を返します。

これらの関数を組み合わせて、以下のように文字列が有効な数値かどうかを確認できます。

function isNumeric(numStr) {
  if (numStr === '') {
    return false;
  }
  const parsedNum = parseInt(numStr);
  return isFinite(parsedNum) && !isNaN(parsedNum);
}

変換に成功した場合 (parsedNumNaN ではない場合)、isFinite(parsedNum) を使用して、parsedNum が有限な数値かどうかを判断します。

有限な数値の場合は (true)、!isNaN(parsedNum) を使用して、parsedNumNaN ではないかどうかを判断します。

Number() コンストラクタは、引数を数値に変換し、変換に成功した場合は数値を表すオブジェクトを返し、失敗した場合は NaN を返します。

function isNumeric(numStr) {
  if (numStr === '') {
    return false;
  }
  return !isNaN(Number(numStr));
}

変換に成功した場合 (NaN ではない場合)、true を返します。

function isNumeric(numStr) {
  if (numStr === '') {
    return false;
  }
  return !isNaN(parseFloat(numStr));
}

このコード例は、Number() コンストラクタを使用した例とほぼ同じですが、parseFloat() 関数を使用して浮動小数点数を解析しています。

上記で紹介した方法は、それぞれ異なる特性を持っています。

状況に応じて適切な方法を選択してください。

  • 浮動小数点数を厳密に区別する必要がある場合は、正規表現を使用する必要があります。
  • 整数のみを判定する場合は、parseInt() 関数と isFinite() 関数を使用する方法が効率的です。
  • 変換後の値が必要な場合は、Number() コンストラクタまたは parseFloat() 関数を使用する方法が適しています。

javascript validation numeric


jQueryでString.formatと同等の機能を実現する3つの方法 - それぞれのメリットとデメリットを比較

JavaScriptのString. format関数は、フォーマット文字列を使用して動的に文字列を生成する便利な機能です。しかし、jQueryには独自の実装がありません。本記事では、jQueryでString. formatと同等の機能を実現する方法について、以下の2つの方法を中心に解説します。...


【初心者向け】JavaScriptでバイナリ変換をマスターしよう!3つの方法とサンプルコード

toString(2) メソッドを使うこれは最も簡単で基本的な方法です。以下のコードのように、toString(2) メソッドを使って整数をバイナリ文字列に変換できます。この方法は、小数点以下の部分は切り捨てられます。また、符号付きの整数の場合、負の数は符号付きバイナリで表現されます。...


JavaScriptでフォーム送信時のEnterキー無効化を簡単解説!jQueryとその他の方法

必要なものjQueryライブラリフォーム手順jQueryライブラリを読み込みます。フォーム要素に対して、keydownイベントハンドラを設定します。イベントハンドラ内で、押されたキーがEnterキーかどうかを判定します。Enterキーが押された場合は、preventDefault()メソッドを使って、デフォルトの送信動作をキャンセルします。...


offsetParent、getBoundingClientRect、IntersectionObserver:それぞれのメリットとデメリット

JavaScript で要素が DOM に表示されているかどうかを確認するには、いくつかの方法があります。 以下では、代表的な方法とそのメリット・デメリットについて解説します。方法 1: offsetParent プロパティを使用する概要: offsetParent プロパティは、要素の親要素の中で、スクロール可能な要素を指します。 このプロパティが null でない場合、要素は DOM に表示されていることになります。...


JavaScript、jQuery、CSS で発生する "Uncaught TypeError: a.indexOf is not a function" エラーの原因と解決方法

このエラーは、Foundation 5 プロジェクトを開こうとすると発生することが多い問題です。これは、jQuery のバージョン不一致や、古いバージョンの jQuery ライブラリの使用など、さまざまな原因によって発生する可能性があります。...