我的表单中有一个奖品输入字段。有效的用户输入应该是这样的:
1.00
0.00
10000.20
100.25
在浮点数之前可以有无限个数字,在只有2个数字之后。我尝试用regex:
来实现这一点/^([0-9]+)'.([0-9]{2})$/
如果你在这里检查:https://regex101.com/有一个匹配的值10.00
但是现在在PHP中我使用preg_match()
如下:
!preg_match('/^([0-9]+)'.([0-9]{2})$/', $obj->getPrize());
- 10.00返回true
- 10.01返回false
谁能解释一下这两者的区别?为什么10.00
返回true?我认为preg_match()
处理零不同,但如何实现这个任务?
你的问题不是正则表达式。这是你的数字,因为如果你最后没有任何必要的数字,PHP会把你的0剪掉。您可以通过下面的代码看到:
$num = 10.00;
var_dump($num);
$num = 10.01;
var_dump($num);
输出:float(10)
float(10.01)
在第一个输出中可以看到,没有.00
,因为它后面没有任何数字。但是你的regex需要.
之后的2个数字,这就是为什么你的regex失败的原因。
现在一个解决方案是将'.([0-9]{2})
设置为可选的,例如
^([0-9]+)(?:'.([0-9]{2}))?$