【问题标题】:RegEx for currency (JavaScript)货币正则表达式 (JavaScript)
【发布时间】:2013-11-20 09:27:31
【问题描述】:

我是正则表达式的新手,我想用 javascript 验证用户输入。

用户输入是一种货币,但我希望它没有数千个逗号。

有效

"12.34"
"12,34"
"1234,5"
"123"
"123,00"
"12000"

无效

"12a34"
"abc"
"12.000,00"
"12,000.00"

我尝试了以下正则表达式模式,但它对我不起作用。它验证例如“12a34”,我不知道为什么。

/\d+([\.|\,]\d+)?/

正确的正则表达式模式是什么?你能逐步解释一下吗?

谢谢!

【问题讨论】:

标签: javascript regex currency


【解决方案1】:

不要在字符组中转义.。尝试使用以下正则表达式:

/^\d+([.,]\d{1,2})?$/

^   = start of string
$   = end of string
()? = an optional capturegroup ( e.g. to validate "123")
{x,y} = The symbol may occur minimum x and maximum y times

【讨论】:

  • 谢谢,这对我有用。这个模式的 ^ 和 $ 是什么意思?
  • ^ 表示您从字符串的第一个字符和$ 匹配正则表达式到末尾。没有它,正则表达式只能匹配字符串的一部分。
  • +1 只是提一下,如果要匹配小数点后最多 2 位,可以使用 \d{1,2} 而不是 \d+
  • 感谢更新答案,真的帮助我理解正则表达式!
【解决方案2】:
RegExp: /^(?!\(.*[^)]$|[^(].*\)$)\(?\$?(0|[1-9]\d{0,2}(,?\d{3})?)(\.\d\d?)?\)?$/g
pattern: ^(?!\(.*[^)]$|[^(].*\)$)\(?\$?(0|[1-9]\d{0,2}(,?\d{3})?)(\.\d\d?)?\)?$
flags: g
3 capturing groups: 
   group 1: (0|[1-9]\d{0,2}(,?\d{3})?)
   group 2: (,?\d{3})
   group 3: (\.\d\d?)

Regex Test

【讨论】:

  • 链接腐烂 - 然后你的答案就没用了。
  • 换句话说,在这里给出答案。您可以提供指向小提琴或测试站点的链接,但其他站点不会永远存在。答案(以及示例和问题!)应该是独立的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-11-30
  • 1970-01-01
  • 2010-10-23
  • 1970-01-01
  • 1970-01-01
  • 2015-02-26
  • 1970-01-01
相关资源
最近更新 更多