[英]Regex for number with decimals and thousand separator
我需要正則表達式來使用 javascript 驗證一個可能包含千位分隔符或小數的數字。 最大值為9,999,999.99
最小值0.01
其他有效值: 11,111
11.1
1,111.11
無效值: 1111
1111,11
,111
111,
我沒有快樂地到處尋找。
/^\d{1,3}(,\d{3})*(\.\d+)?$/
關於最小值和最大值......好吧,我不會用正則表達式來做,但你可以在開始時添加前瞻:
/^(?!0+\.00)(?=.{1,9}(\.|$))\d{1,3}(,\d{3})*(\.\d+)?$/
注意:這允許0,999.00
,因此您可能需要將其更改為:
/^(?!0+\.00)(?=.{1,9}(\.|$))(?!0(?!\.))\d{1,3}(,\d{3})*(\.\d+)?$/
這不允許前導 0。
編輯:
測試: http : //jsfiddle.net/pKsYq/2/
((\d){1,3})+([,][\d]{3})*([.](\d)*)?
它適用於一些,但我仍在學習正則表達式。
邏輯應該是 1-3 位數字 0-1 次,1 個逗號后跟任意次數的 3 位數字,以及單個 . 后跟任意數量的數字 0-1 次
Tezra 的公式對於“1”失敗。 或“1.0”。 出於我的目的,我允許前導和尾隨零,以及前導 + 或 - 符號,如下所示:
^[-+]?((\d{1,3}(,\d{3})*)|(\d*))(\.|\.\d*)?$
首先,我想指出,如果您擁有數據來自的表單,那么限制輸入的最佳方法是使用正確的表單元素(又名,數字字段)
<input type="number" name="size" min="0.01" max="9,999,999.99" step="0.01">
是否可以輸入“,”取決於瀏覽器,但瀏覽器總是會給你一個實際數字的值。 (請記住,所有表單數據也必須在服務器端進行驗證/清理。永遠不要相信客戶端)
其次,我想擴展更強大(獨立於平台)/可修改正則表達式的其他答案。
^<my_regex>$
(<regex>)?
\\.\\d+
[1-9]
表示“非零數字”,所以\\.\\d+[1-9]
([1-9]<rest-of-number-regex>|0)
[1-9]\\d{0,2}
(,\\d{3})*
(,?\\d{3})*
把這一切放在一起
^([1-9]\d{0,2}(,?\d{3})*|0)(\.\d+[1-9])?$
我在下面的正則表達式中使用了以下限制 -
^(?!0|\.00)[0-9]+(,\d{3})*(.[0-9]{0,2})$
在最近的一個項目中,我們需要修改這個版本以滿足國際要求。 這是我們使用的: ^-?(\\d{1,3}(?<tt>\\.|\\,| ))((\\d{3}\\k<tt>)*(\\d{3}(?!\\k<tt>)[\\.|\\,]))?\\d*$
創建命名組(?<tt>\\.|\\,| )
允許我們稍后使用負向預測(?!\\k<tt>)[\\.|\\,])
以確保千位分隔符和小數點其實是不同的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.