我想寫一個RegEx來驗證一個浮點數。下面是我迄今管理:浮點正則表達式?
/^[-+]?[1-9]\d{0,2}(\.\d{1,1})?/
數量是有效的,如果:
- 或正或負
- 最大的2個位數(幾十或幾百)
- 百分位數字可't 0(僅1-9)
- 比例最大爲1
- 小數值可以是0或5或根本沒有
所以這些數字將是有效的,爲前:
- 1.5
- -1.5
- 17.5
- -3
- 30.5
這些數字將是inv alid,爲前:
- 1.57
- 3041.5
- 17.59
- -1.56
- 05.0
我想寫一個RegEx來驗證一個浮點數。下面是我迄今管理:浮點正則表達式?
/^[-+]?[1-9]\d{0,2}(\.\d{1,1})?/
數量是有效的,如果:
所以這些數字將是有效的,爲前:
這些數字將是inv alid,爲前:
正如我在評論中說的 - 你的第一個非零數字會算的話,你加兩個 - 現在讓三位數字如915
。爲了解決這個問題的正則表達式的方式(with your testcases):
^[+-]?(?:(?!0)\d{1,2}|0)(?:\.[05])?$
我使用負前瞻(?!0)
以確保第一個數字是不是零,那麼就需要對想要選擇的位數。它也允許0.5
和類似的通過|0
析取。如果你喜歡.5
,這將是這樣的:
^[+-]?(?!0)\d{,2}(?:\.[05])?$
如果你想禁止3.0
(由你的規則允許的),只允許3
(如你的例子暗示),取代的最後一部分:
^[+-]?(?:(?!0)\d{1,2}|0)(?:\.5)?$
但是,這比@ Arkku的漂亮的Float(number)
可讀性差得多;使用正則表達式,如果你真的需要它們。
如何Float(number)
(捕獲異常檢測分析錯誤)然後驗證浮點數?對於幾個屬性,這比編寫正則表達式要容易一些。如果您需要強制使用Ruby接受的語法子集(爲什麼?),請僅使用正則表達式檢查該部分。
你能告訴我們如何才能捕捉到類似Float(「xyz」)拋出異常時引發的異常 – 2016-02-01 11:30:05
@AdityaSanghi'begin' /'rescue'像往常一樣,在' irb'顯示'Float(「xyz」)'拋出'ArgumentError'。 – Arkku 2016-02-01 12:23:12
是對ArgumentError的救援工作。謝謝 – 2016-02-03 09:07:06
下面是對正則表達式驗證彩車整體網頁:http://www.regular-expressions.info/floatingpoint.html
這就是說,
{1,1}
相當於{1}
這相當於沒有把它所有,因此你可以將其刪除0.5xyz
未通過,請在末尾添加$
隨着上述變化,它會是這樣的:/^[-+]?[1-9]\d{0,2}(\.\d)?$/
/^[-+]?\d{0,2}(\.[05])?(?!\d)$/
匹配時:
值是正或負
幅度小於100中的(-99.5 to 99.5)
十進制值的範圍是.0
或.5
或不存在(換句話說,.0
或.5
,或缺失)
因此,這些數字將是有效的,爲前:
1.5
-1.5
17.5
15
-3
30.5
-10.0
99.5
這些數字將無效,例如:
1.57
3041.5
17.59
915
-1.56
05.0
99.6
.5會有效嗎? – ggreiner 2012-02-08 01:53:15
正則表達式是這個的正確工具嗎? – alex 2012-02-08 01:54:10
爲什麼要對構成浮動的構成進行人爲限制? – Dave 2012-02-08 01:58:21