正規表現

正規表現で小数や浮動小数点数をかく方法 | 正負, カンマ桁区切り

正規表現での小数や浮動小数点数を解説
記事の要約
  • 小数(正の数)は「^\d+.\d+$」
  • 整数または小数(正の数)は「^\d+(?:.\d+)?$」
  • 整数または小数(正の数, カンマ桁区切り)は「^[\d,]+(?:.\d+)?$」
  • 整数または小数(正負OK)は「^[+-]?(?:\d+.?\d|.\d+)$」
  • 浮動小数点数は「^[+-]?[0-9]+.[0-9]+([eE][+-]?[0-9]+)?$」

正規表現での小数の書き方

小数のみの書き方

小数(正の数)のみを表現する場合は次のように表現します。ちなみに「\d」は「[0-9]」の意味を表し、これは0123456789の数字を表しています。

// 小数(正の数)を表す書き方
^\d+.\d+$

// マッチするパターン
1234.56
// マッチしないパターン
123456
1,234.56
+1234.56
-1234.56
1234.
.56

最低限のパターンにはマッチしますが例外も多く存在します。以下ではその例外パターンに対策した表現を紹介します。

整数または小数の書き方

小数だけでなく整数にも対応した場合の正規表現は次のようになります。

// 整数または小数(正の数)の書き方
^\d+(.\d+)?$
// ()でキャプチャされるのを防ぎたいときはこちら
^\d+(?:.\d+)?$

// マッチするパターン
1234.56
123456
// マッチしないパターン
1,234.56
+1234.56
-1234.56
1234.
.56

「?」は直前の文字を0回または1回あるものとする表現なため、「.\d+」を「(.\d+)?」とすることで小数部分があってもなくてもOKとしています。

整数または小数の書き方(カンマ桁区切り)

整数または小数のうちカンマ桁区切りも許容したパターンは次のとおりです。

// 整数または小数(正の数)のうちカンマ桁区切りありの書き方
^[\d,]+(.\d+)?$

// ()でキャプチャされるのを防ぎたいときはこちら
^[\d,]+(?:.\d+)?$

// マッチするパターン
1234.56
123456
1,234.56
// マッチしないパターン
+1234.56
-1234.56
1234.
.56

最初の「\d+」を「[\d,]+」とすることで整数部分にカンマが含まれていても許容できる形になっています。

整数または小数の書き方(符号あり)

整数または小数のうち符号有無も許容したパターンは次のとおりです。

// 整数または小数(正負OK)の書き方
^[+-]?(\d+.?\d|.\d+)$

// ()でキャプチャされるのを防ぎたいときはこちら
^[+-]?(?:\d+.?\d|.\d+)$

// マッチするパターン
1234.56
123456
+1234.56
-1234.56
// マッチしないパターン
1,234.56
1234.
.56

文頭に「[+-]?」を追記することで「+, -, (なし)」の3パターンに対応できるようにしています。

なお上記で上記で紹介したいずれの正規表現も「.123」や「123.」のようなパターンには対応できていないので、それを知りたい方はこちらの方の投稿を参考にしてみてください。

正規表現での浮動小数点数の書き方

正規表現にて「1.234e5」「6.7E-8」のような浮動小数点数を表すには次のように書きます。

// 浮動小数点数の書き方
^[+-]?[0-9]+\.[0-9]+([eE][+-]?[0-9]+)?$

// 符号OK
// 整数NG
// 指数なしOK
// eEの表記ゆれOK

// マッチするパターン
1234.56
+1234.56
-1234.56
1.234e5
6.7E-8
// マッチしないパターン
123456
1,234.56
1234.
.56

表現が長いので要素に分解して解説します。

「([eE][+-]?[0-9]+)?」部は全体を「(…)?」で囲っているため指数部分があってもなくてもOKとなっています。

必要に応じて「[+-]?」を「-?」にしたり「[0-9]+」を「[1-9]+」や「[0-9]*」にしたりして、ほしい表現に調整してください。