以下に一致する正規表現が必要です。
.5
0.5
1.5
1234
だがしかし
0.5.5
absnd (any letter character or space)
私はすべてを満足させるこれを持っていますが、0.5.5
^[.?\d]+$
以下に一致する正規表現が必要です。
.5
0.5
1.5
1234
だがしかし
0.5.5
absnd (any letter character or space)
私はすべてを満足させるこれを持っていますが、0.5.5
^[.?\d]+$
これはかなり一般的なタスクです。私が知っている最も簡単な対処方法は次のとおりです。
^[+-]?(\d*\.)?\d+$
先頭のゼロやコンマなどを許可するかどうかなど、他の複雑な問題もあります。これは、必要に応じて複雑にすることができます。たとえば、1,234,567.89 形式を許可する場合は、次のようにします。
^[+-]?(\d*|\d{1,3}(,\d{3})*)(\.\d+)?\b$
単語の区切り\bがありますが、文字列の最後に少なくとも 1 つの数字を要求する卑劣な方法として使用しています。このように、空の文字列または単一の文字列+は一致しません。
ただし、正規表現は数値文字列を解析する理想的な方法ではないことに注意してください。私が知っているすべての最新のプログラミング言語には、それを行うための高速でシンプルな組み込みメソッドがあります。
これは、先読みや後読みを使用しない、はるかに単純なソリューションです。
^\d*\.?\d+$
これが機能する理由を明確に理解するには、右から左に読んでください。
7動作
77します 動作
し.77ます 動作
します0.77動作
0.しません
.77動作
します77動作
..77しません
.77作品
0.77作品
0077.77作品
0077作品先読みと後読みを使用しないことには、RegEx ベースの DOS 攻撃を心配する必要がないという追加の利点があります。
HTH
誰も負の数を説明していないようです。また、不要なキャプチャ グループを作成している人もいます。これは最も徹底的なソリューション IMO です。
^[+-]?(?:\d*\.)?\d+$
以下が機能するはずです。
^(?!.*\..*\.)[.\d]+$
これは、否定先読みを使用して、文字列内の文字が 2 文字未満であることを確認し.ます。
これはうまくいくかもしれません:
^(?:\d*\.)?\d+$