HTML5表单输入模式货币格式

use*_*500 33 regex html5

使用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)

  • @ mbomb007编程语言和用户输入之间存在很大差异.由于这个星球上70亿人中的大多数人都不懂编程语言,因此您的愿景不仅仅是短视.除了阅读计算机的历史.你不应该跳过这些历史课程,或者如果你至少没有要求退款...... (6认同)
  • FYI投入输入标签我必须将双重转义更改为单一所以... ^\$?(([1-9](\ d*|\d {0,2}(,\ d {3} )*))| 0)(\.\ d {1,2})?$除此之外它运作良好 (2认同)

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})?$` (2认同)

Tot*_*oto 6

怎么样 :

^\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)

这将匹配以下字符串:

  • 一个或多个不带小数位的数字(\ d +)
  • 任意数量的逗号,每个逗号后面必须带有3个数字,并且之前必须有3个数字(\ d {1,3})(\,\ d {3} |)*

每个小数点或每个小数点后都必须带有2个数字(。\ d {2} |)