【问题标题】:Validate a number with grouped thousands with decimal to the hundreth用小数到百位数的千位分组验证数字
【发布时间】:2010-10-25 15:05:06
【问题描述】:

寻找一种简单的方法(函数/正则表达式)来验证包含数千个分组的数字。

示例编号:

.00 - 999.00 should validate
1,000.00 should validate
100,000.00 etc... should validate
100,000,000,000,000.00 should validate

现在我已经看到了number_format(),但这格式的数字无法验证。

我想使用 RegEx,但不知道如何使用。

preg_match(/^[\d]\,?\.[\d]{2}$/, $number);

但这不起作用。

我也查看了money_format(),但这是格式而不是验证。

【问题讨论】:

  • 哪些东西不应该验证,1000? 1,000.000?
  • 是必须提交这些数字的用户吗?
  • 1,000.000 不应验证,因为小数点显示的是千分之一数
  • 是的,用户将输入这些数字
  • 那为什么不让他们提交简单的数字呢?

标签: php validation number-formatting


【解决方案1】:
^(?:\d{1,3}(?:,\d{3})*)?\.\d{2}$

【讨论】:

  • 这个模式中的冒号有什么作用?
  • 谢谢,只有一个问题。我知道?使字符可选,但这对表达式有什么影响:
  • @Ben, @Phill:你是指?: 部分吗?他们只是意味着括号中的组是非捕获的。当您实际上不需要捕获文本时,使用非捕获组可以提供(非常小的)性能改进。 regular-expressions.info/brackets.html
  • 是的。感谢您的洞察力和正则表达式
【解决方案2】:

就在我的脑海中:

preg_match('%^[\d,]*\.\d{2}$%', $number);

这将匹配您提到的所有数字(实际上:每个字符串都以数字和逗号的组合开头并以“.”和数字结尾)。

同样,这是未经测试的,但应该可以工作。

【讨论】:

  • 这将允许 1000.00 应采用以下格式:1,000.00
  • 这也将允许:1,0,0.00
【解决方案3】:

如果你有 PHP5.3+,你可以试试 Intl number formatter:

http://www.php.net/manual/en/numberformatter.parse.php

【讨论】:

  • 感谢我正在运行 5.x,但这不是格式问题,而是验证问题。感谢您的努力
猜你喜欢
  • 2013-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-26
  • 2021-08-16
  • 2020-04-01
  • 1970-01-01
  • 2020-10-07
相关资源
最近更新 更多