web-dev-qa-db-ja.com

10進数/浮動小数点数を見つけるための正規表現?

12 12.2 1236.32 123.333および+12.00または-12.00または... 123.123 ...などの10進数/浮動小数点数の正規表現がjavascriptおよびjQueryで使用するために必要です。ありがとうございました。

31
MBehtemam

オプションで、先頭に+または-があり、その後に1つ以上の10進数字が続きます。オプションで、文字列の最後に小数点と1つ以上の10進数字が続きます。

/^[+-]?\d+(\.\d+)?$/

RegexPal

68
Paulpro

正しい表現は次のとおりです。

[+-]?([0-9]*[.])?[0-9]+

これは以下に適用されます:

+1
+1.
+.1
+0.1
1
1.
.1
0.1

Pythonの例:

import re
#print if found
print(bool(re.search(r'[+-]?([0-9]*[.])?[0-9]+', '1.0')))
#print result
print(re.search(r'[+-]?([0-9]*[.])?[0-9]+', '1.0').group(0))

出力:

True
1.0

Macを使用している場合は、コマンドラインでテストできます。

python -c "import re; print(bool(re.search(r'[+-]?([0-9]*[.])?[0-9]+', '1.0')))"

python -c "import re; print(re.search(r'[+-]?([0-9]*[.])?[0-9]+', '1.0').group(0))"
5
lbsweek

IsNaNを使用して、テキスト検証と1つの小数点検証のみを確認できます。

var val = $('#textbox').val();
var floatValues =  /[+-]?([0-9]*[.])?[0-9]+/;
 if (val.match(floatValues) && !isNaN(val)) {
  // your function
}
2
Swathi

Paulproとlbsweekの回答は私をこれに導きました。

re=/^[+-]?(?:\d*\.)?\d+$/;
>> /^[+-]?(?:\d*\.)?\d+$/

re.exec("1")
>> Array [ "1" ]

re.exec("1.5")
>> Array [ "1.5" ]

re.exec("-1")
>> Array [ "-1" ]

re.exec("-1.5")
>> Array [ "-1.5" ]

re.exec(".5")
>> Array [ ".5" ]

re.exec("")
>> null

re.exec("qsdq")
>> null
0
duparq

これは古い投稿ですが、「浮動小数点の正規表現」またはそのようなもののトップの検索結果であり、_my_の質問にはまったく答えていません。このスレッドに出くわした人は自分で解決する必要はありません。

これまでのすべての答えは、小数点の左側に2桁以上の数字の先頭の_0_を受け入れます(たとえば_0123_の代わりに_123_)これはそうではありません本当に有効で、一部のコンテキストでは、数値が通常の10進数(10進数)形式ではなく8進数(8進数)であることを示すために使用されます。

また、これらの式は、先頭にゼロのない10進数(_.14_の代わりに_0.14_)または末尾の小数部なし(_3._の代わりに_3.0_)を受け入れます。それはいくつかのプログラミングコンテキスト(JavaScriptを含む)で有効ですが、それらを禁止したいです(私の目的のために、意図的よりもエラーである可能性が高いため)。

_1.234E7_のような「科学表記法」を無視すると、ここに私の基準を満たす式があります:

/^((-)?(0|([1-9][0-9]*))(\.[0-9]+)?)$/

または、実際に先頭の_+_を受け入れたい場合:

/^((\+|-)?(0|([1-9][0-9]*))(\.[0-9]+)?)$/

正規表現は、典型的な整数または10進数形式の浮動小数点数に対して厳密なテストを実行すると信じています。

一致した場合:

  • _$1_には一致した完全な番号が含まれます
  • _$2_には(おそらく空の)先行符号が含まれます(+/-)
  • _$3_には、小数点の左側の値が含まれます
  • _$5_には、先頭の_._を含む小数点の右側の値が含まれます

「厳格」とは、テストする文字列の中で数字だけが必要であることを意味します。

他のコンテンツを含む文字列からfloat値のみを抽出する場合は、次の式を使用します。

/((\b|\+|-)(0|([1-9][0-9]*))(\.[0-9]+)?)\b/

_-3.14_は_"negative pi is approximately -3.14."_または"(-3.14)"などで見つかります。

番号付きグループの意味は上記と同じです(ただし、nullではなく、先頭に記号がない場合は_$2_が空の文字列(_""_)になります)。

ただし、検出可能な数値を抽出しようとすることにも注意してください。たとえば、_127.0_から_127.0.0.1_を抽出します。

それより高度なものが必要な場合は、正規表現ではなく語彙分析を検討することをお勧めします。 _"Pi is 3.14."_には浮動小数点数が含まれるが_Home is 127.0.0.1._には含まれないことを認識する先読みベースの式を作成できると思いますが、せいぜい複雑です。あなたのパターンが重要な方法でその後に続くキャラクターに依存している場合、正規表現のスイートスポットの外で冒険し始めています。

0
Rod