1から100までの数字を受け入れる正規表現があります。ただし、特殊文字'%'を受け入れます。
これは私が使用している正規表現です
^(0*100{1,1}\\.?((?<=\\.)0*)?%?$)|(^0*\\d{0,2}\\.?((?<=\\.)\\d*)?%?)$'
私は%を受け入れたくありません誰かがこれを修正するのを手伝ってくれませんか。
1から100までの数字を受け入れる正規表現があります。ただし、特殊文字'%'を受け入れます。
これは私が使用している正規表現です
^(0*100{1,1}\\.?((?<=\\.)0*)?%?$)|(^0*\\d{0,2}\\.?((?<=\\.)\\d*)?%?)$'
私は%を受け入れたくありません誰かがこれを修正するのを手伝ってくれませんか。
Ali Shah Ahmedによって提案された正規表現は、1桁の数字では機能しません。これは、次のように機能します。
(100)|(0*\d{1,2})
編集済み:値0を受け入れたくない場合は、次の正規表現を使用できます。
(100)|[1-9]\d?
すべてを削除します%?
。これは、正規表現が0文字または1文字に一致する必要があることを示しています%
。
私は多段階のアプローチを取ります。正規表現だけでこれを解決しようとはしません。メンテナンスは悪夢です。
私の解決策:-
単純な正規表現を使用して、値が3桁以下の整数であるかどうかを判別します。
/^\d{1,3}$/
有効な場合は、数値にキャストします。
<= 100
番号がとであることを確認してください>= 0
。
この正規表現も機能し、あなたが言及したものよりも少し単純だと思います。
(100)|(0*\d{1,2})
これにより、先行ゼロも処理されます。
これは、1から100までにのみ一致します。
/\b((100)|[1-9]\d?)\b/
\b
単語の境界に一致します。これは、JavaScriptのようなものを意味します:
/((100)|[1-9]\d?)/.test("I have 1000 dollars");
を返しtrue
ます。代わりに、境界という単語を使用すると、が返されfalse
ます。
これにより、1から100までの数値が可能になります。
100|[1-9]?\d
^(100 | [1-9] [0-9]?)$ この正規表現は1から100の間で一致し、100は正確に100と一致し、[1-9]は1から9の範囲の文字と一致します[0-9] 0から9の範囲の文字に一致しますか?前のトークンの0と1の間で一致します
参考までに、ここで正規表現の組み合わせを検証してくださいhttps://regexr.com/
一致に小数点が含まれ、先行ゼロがない場合は、これが最良の選択だと思います
^(?:[0-9]|[1-9][0-9](\.\d{1,2})?|100|10.00)$
22 # returns True
100 # returns True
22.35 # returns True
20.23 # returns True
100.1 # returns false out bound/range
02 # returns False leading zero
69.235 # returns False exceeds 2 decimal places
001 # returns False has 2 leading zeroes
小数点以下の桁数を小数点以下2桁に制限します。テストの組み合わせを確認してくださいhttps://regex101.com/r/Tpe9Ia/101