4

我正在尝试找到一段正则表达式来匹配货币值。

我只想匹配数字和 1 个小数点,即

允许

  • 10
  • 100
  • 100.00

不允许

  • 字母字符
  • 100,00
  • +/- 100

我已经搜索并尝试了很多,但没有任何运气。

希望你能给点建议

4

4 回答 4

6
if (preg_match('/^[0-9]+(?:\.[0-9]+)?$/', $subject))
{
    # Successful match
}
else
{
    # Match attempt failed
}

旁注:如果要限制所需的小数位数,可以执行以下操作:

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

所以

100.000

将匹配,而

100.0001

惯于。

如果您需要任何进一步的帮助,请发表评论。

PS如果可以,请使用上面发布的数字格式化程序。原生函数总是更好(更快),否则这个解决方案会很好地为您服务。

于 2009-05-02T18:31:20.150 回答
4

这个怎么样

if (preg_match('/^\d+(\.\d{2})?$/', $subject))
{
   // correct currency format
} else {
  //invalid currency format
}
于 2012-04-16T05:45:45.073 回答
2

您可能需要考虑使用正则表达式的其他替代方法。

例如,有一个NumberFormatter类,它提供灵活的数字和货币解析格式化,并内置国际化支持。

它内置于 PHP 5.3 及更高版本中,可作为 PHP 5 早期版本的扩展使用。

于 2009-05-02T15:32:13.327 回答
0

试试这个正则表达式:

^(?:[1-9]\d+|\d)(?:\.\d\d)?$
于 2009-05-02T14:55:30.997 回答