【发布时间】:2021-08-16 00:12:41
【问题描述】:
我正在为特定格式的价格制定正则表达式。
有效的输入是:
- 自然数
- 小数(小数点后最多两位),0.0 和 0.00 除外
- 以上所有条件均不带前导零(ex-05 和 08.45 无效,但 5 和 8.45 有效)
有效测试用例示例
1
11
0.10
0.01
1.1
1.00
11.11
无效测试用例示例
0
0.
0.0
0.00
0.000
01
001
1.
1.111
1111.1111
00.1
00.11
01.11
这是我尝试过但无法正常工作的方法
/^(((?!0)\d+)(.\d{1,2})?)|(0\.(([1-9]\d)|(0[1-9])))$/gm
见Demo #1。
/^[1-9]+[0-9]*(.\d{1,2})?$/gm
见Demo #2。
Regular Expression for Currency 中的解决方案对我不起作用,因为它成功验证了 00.11。
编辑:我猜想有点摆弄,这次我做对了。只需将 [1-9] 更改为 [0-9] 即可。
^(?![0.]*$|0+[0-9])\d+(?:\.\d{1,2})?$
见Demo #3。
感谢Wiktor Stribiżew 帮助这个新手。非常感谢先生。
【问题讨论】:
-
^(?![0.]*$|0+[1-9])\d+(?:\.\d{0,2})?$?见regex101.com/r/uFSPP5/1 -
它接受“1”。也如您的链接中所示先生。不过感谢您的努力。
-
目前还不清楚你需要接受什么,不接受什么。然后尝试
^(?![0.]*$|0+[1-9])\d+(?:\.\d{1,2})?$。见regex101.com/r/uFSPP5/2。另外,请检查重复的问题并根据您的发现更新您的问题(那里的解决方案是否适合您)。 -
很抱歉再次打扰,但它也接受仍然无效的“000000.80”、“00.80”等。如果可能,请查看regex101.com/r/uFSPP5/3
-
然后确保使用更具体的标题并将所有有效/无效的测试用例添加到问题中。您还必须解释为什么该副本没有帮助。