使用HTML5我有一个输入字段,应根据输入的美元金额进行验证。目前我有以下标记:
<input type="number" pattern="(\d{3})([\.])(\d{2})">
这适用于大于100.00且小于1,000.00的金额。我试图写模式(正则表达式)接受不同的美元金额。也许超过100,000.00。这可能吗?
答案 0 :(得分:41)
我们能想到的最好的是:
^\\$?(([1-9](\\d*|\\d{0,2}(,\\d{3})*))|0)(\\.\\d{1,2})?$
我意识到它可能看起来太多了,但就我能测试而言,它与人眼所接受的任何东西相匹配,并将其他所有东西都清除掉了。
符合以下条件:
1 => true
1.00 => true
$1 => true
$1000 => true
0.1 => true
1,000.00 => true
$1,000,000 => true
5678 => true
除掉这些:
1.001 => false
02.0 => false
22,42 => false
001 => false
192.168.1.2 => false
, => false
.55 => false
2000,000 => false
答案 1 :(得分:29)
如果要允许逗号分隔符,它将传递以下测试用例:
0,00 => true
0.00 => true
01,00 => true
01.00 => true
0.000 => false
0-01 => false
然后使用它:
^\d+(\.|\,)\d{2}$
答案 2 :(得分:6)
怎么样:
^\d+\.\d{2}$
这匹配一个或多个数字,一个点和点后的2位数。
要将逗号匹配为千位分隔符:
^\d+(?:,\d{3})*\.\d{2}$
答案 3 :(得分:4)
另一个答案是
^((\d+)|(\d{1,3})(\,\d{3}|)*)(\.\d{2}|)$
这将匹配一个字符串:
每个或哪个可以有一个小数位,后面必须跟两个数字(。\ d {2} |)
答案 4 :(得分:2)
我写的这个价格模式没有零价格。
(0\.((0[1-9]{1})|([1-9]{1}([0-9]{1})?)))|(([1-9]+[0-9]*)(\.([0-9]{1,2}))?)
适用于:
无效:
在线查看我的代码:http://regexr.com/3binj
答案 5 :(得分:1)
我喜欢给用户一点灵活性和信任,他们会得到正确的格式,但我确实只想强制数字和两位小数用于货币
^[$\-\s]*[\d\,]*?([\.]\d{0,2})?\s*$
照顾:
$ 1.
-$ 1.00
$ -1.0
.1
.10
-$ 1,000,000.0
当然它也会匹配:
$$--$1,92,9,29.1 => anyway after cleanup => -192,929.10
答案 6 :(得分:-1)
使用此模式"^\d*(\.\d{2}$)?"