HTML5表单输入模式货币格式

时间:2011-05-11 11:01:47

标签: regex html5

使用HTML5我有一个输入字段,应根据输入的美元金额进行验证。目前我有以下标记:

<input type="number" pattern="(\d{3})([\.])(\d{2})">

这适用于大于100.00且小于1,000.00的金额。我试图写模式(正则表达式)接受不同的美元金额。也许超过100,000.00。这可能吗?

7 个答案:

答案 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 +)
  • 任意数量的逗号,每个逗号后面必须跟3个数字,并且前面最多有3个数字(\ d {1,3})(\,\ d {3} |)*

每个或哪个可以有一个小数位,后面必须跟两个数字(。\ d {2} |)

答案 4 :(得分:2)

我写的这个价格模式没有零价格。

(0\.((0[1-9]{1})|([1-9]{1}([0-9]{1})?)))|(([1-9]+[0-9]*)(\.([0-9]{1,2}))?)

适用于:

  • 1.00
  • 1
  • 1.5
  • 0.10
  • 0.1
  • 0.01
  • 2500.00

无效:

  • 0
  • 0.00
  • 0.0
  • 2500
  • 2500.0000

在线查看我的代码: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}$)?"