0

我有这个 javascript 正则表达式(带一个点的小数点后 3 位)

^\d+(\.\d{1,3})?$

我也想匹配一个""我认为是的空字符串

^$

我怎样才能将这些组合成 1 个正则表达式

这些应该是通过测试

"" //empty string
1
1.
1.0
1.00
1.000
123456789
0
.0
.00
.000

我希望我已经涵盖了所有这些。

4

4 回答 4

3

不包括空格,您当前的表达式似乎没有通过您的要求。

^\d*\.?\d{0,3}$

可选的前导数字,可选的点,结束前最多三位数字。

编辑:@Guffa 注意到我原来的解决方案也可以简单地匹配一个点,“。”

^\d*((\d\.)|(\.\d))?\d{0,3}$

此版本将\.?检查替换为对数字后跟点的检查,或点后跟数字的检查,或两者都不检查。

于 2013-10-29T23:39:41.680 回答
2

用三种不同的情况做一个表达式:

  • 零个或多个数字
  • 一位或多位数字、句点、零到三位数字
  • 零位或多位数字、句点、一到三位数字

这将通过您的所有测试,并且字符串"."也不会通过:

^(\d*|\d+\.\d{0,3}|\d*\.\d{1,3})$

演示:http: //jsfiddle.net/Guffa/9pnwk/

于 2013-10-29T23:46:45.020 回答
1

数字周期案例是一个困难的案例,我原来的答案错过了。这个答案比其他答案更简单,涵盖所有情况,并且没有任何错误匹配。

  • 字符串的开始
  • 匹配任何一个
    • 数字 1+ 次,然后是可选的“。”
    • “。” 只要前面有数字
  • 数字 0-3 次
  • 字符串结尾

表达

^((\d+\.?|\.(?=\d))?\d{0,3})$

雷伊

于 2013-10-29T23:28:56.590 回答
1

我宁愿去 ==="" 或你的正则表达式比较,只是为了性能

于 2013-10-29T23:31:12.527 回答