我需要一个正则表达式来匹配价格或金额。
它应该匹配以下内容
- 100
- 410.00
- 0.12
但不应匹配以下内容
- 100.000
- -600.00
- .12
- .1234
这个正则表达式对于上述所有情况都有效,但是对于单个值(例如1)无效。
/^[0-9]*\.?[0-9]{2}+$/
我该如何调整它,以便单个整数匹配?有人能解释为什么当前的是错误的吗?
我建议对Tom Revell的正则表达式进行小修正,因为你仍然可以输入几个0作为第一位数字。例如00002.23,这很可能是不正确的。
/^([1-9][0-9]*|0)(\.[0-9]{2})?$/
/^[0-9]+(\.[0-9]{2})?$/
/^\d+(\.\d{2})?$/
。 - Md. A. Apu我认为最好不要将正则表达式混合在其中。
我的做法是将值转换为整数并四舍五入,然后检查它是否为负数。我还会检查第一个字符是否为美元符号,如果是,就将其删除。这样的代码更简单、更易读,在我看来更好。如果有人输入12.34512或.1,系统仍然可以正常工作。
//untested
$amount = "$0.12"
if( $amount && $amount[0] == '$' ) {
ltrim($amount, '$');
}
$int_amount = (int) $amount;
$int_amount = round($int_amount, 2);
if( $amount <= 0 ) {
//error
}
学习正则表达式的最佳方法是先在纸上把想法写下来。尝试画出你的正则表达式或者用某种伪代码编写它,在脑海中测试并确保正确性,然后再深入研究语言的正则表达式语法。