【问题标题】:Max 3 digits, up to 3 decimals最多 3 位数字,最多 3 位小数
【发布时间】:2015-08-20 03:19:26
【问题描述】:

看来我又被一个简单的正则表达式卡住了。

我想要什么:

  • 1 到 999 之间的数字
  • 可选:逗号、符号
  • 如果输入逗号符号,则最少 1 个小数,最多 3 个 小数应该是presebt。

允许:
100
999,0
999,999
999,99

不允许:
-1
0
999,
999,9999

这是我目前所拥有的:

^[0-9]{1,3}(?:\,[0-9]{1,3})?$

有什么建议吗?

【问题讨论】:

标签: javascript regex


【解决方案1】:

你可以使用这个正则表达式:

/^[1-9]\d{0,2}(?:\,\d{1,3})?$/

RegEx Demo

与 OP 正则表达式的主要区别在于使用 [1-9],它在正则表达式的其余部分之前匹配数字 1 到 9。

【讨论】:

  • 如果人们能真正解释他们的正则表达式的作用,我会很高兴的。
  • 嗯,很奇怪。在您的演示中,它似乎工作正常。尽管如此,当使用它时,它接受一个没有小数的逗号,当存在小数时,验证失败:s
  • 我正在使用 Angular,使用 ng-pattern 指令:ng-pattern="/^[1-9]\d{0,2}(?:\,\d{1, 3})?$/"
  • 由于某种原因,这个正则表达式可以接受像 9999,99999999 这样的偶数,而您的演示清楚地表明不应该这样做。很奇怪,但已经感谢您的帮助!
【解决方案2】:

这个正则表达式应该可以工作:

^[1-9]\d{0,2}(?:,\d{1,3})?$

解释如下:

^[1-9]: 应该以 1 到 9 之间的数字开头

\d{0,2}:后跟最小0,最大2位(0-9)

(?:,:后跟一个逗号

\d{1,3})?: 如果有逗号,后面应该跟一到三位数字

$: 行尾

EXAMPLE

感谢@dev-null 提供此链接:Explanation

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-26
相关资源
最近更新 更多