使用HTML5我有一个输入字段,应根据输入的美元金额进行验证.目前我有以下标记:
<input type="number" pattern="(\d{3})([\.])(\d{2})">
Run Code Online (Sandbox Code Playgroud)
这适用于大于100.00且小于1,000.00的金额.我试图写模式(正则表达式)接受不同的美元金额.也许超过100,000.00.这可能吗?
小智 43
我们能想到的最好的是:
^\\$?(([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
Run Code Online (Sandbox Code Playgroud)
除草这些:
1.001 => false
02.0 => false
22,42 => false
001 => false
192.168.1.2 => false
, => false
.55 => false
2000,000 => false
Run Code Online (Sandbox Code Playgroud)
wor*_*hit 29
如果要允许逗号分隔符,它将传递以下测试用例:
0,00 => true
0.00 => true
01,00 => true
01.00 => true
0.000 => false
0-01 => false
Run Code Online (Sandbox Code Playgroud)
然后用这个:
^\d+(\.|\,)\d{2}$
Run Code Online (Sandbox Code Playgroud)
怎么样 :
^\d+\.\d{2}$
Run Code Online (Sandbox Code Playgroud)
这匹配一个或多个数字,点和点后2位数.
要将逗号匹配为千位分隔符:
^\d+(?:,\d{3})*\.\d{2}$
Run Code Online (Sandbox Code Playgroud)
小智 5
另一个答案是
^((\d+)|(\d{1,3})(\,\d{3}|)*)(\.\d{2}|)$
Run Code Online (Sandbox Code Playgroud)
这将匹配以下字符串:
每个小数点或每个小数点后都必须带有2个数字(。\ d {2} |)