preg_match()或用于检查货币的类似函数

时间:2012-08-07 16:14:49

标签: php regex syntax preg-match

1.449,00
1.000.000,55
19,90
etc
etc

我知道我上面列出的内容非常多变,但有可能存在货币。我正在寻找一个preg_match()示例或任何其他函数来处理上述可能的情况。我试过下面的例子,但它不能正常工作。有机会给我一个最合适的模式吗?

if (! preg_match('/^[0-9.,]$/', $currency)) { echo 'No good.'; }

2 个答案:

答案 0 :(得分:5)

这样的事情应该有效:

/^((?:\d{1,3}[,\.]?)+\d*)$/

匹配:

^         - Start of string
(         - Capture the following:
 (?:      
  \d{1,3} - One to three digits
  [,\.]?  - And an optional separator (comma or period)
 )+       - One or more times
 \d*      - Zero or more digits
)
$         - End of string

它通过迭代匹配分隔符左侧的所有内容(如果它存在),然后\d*来获取任何可选的货币分数。

您可以看到它通过了all of your tests

修改:更新的正则表达式如下所示:

^((?:\d\.\d{3}\.|\d{1,3}\.)?\d{1,3},\d{1,2})$

我们匹配的地方之一:

  • \d\.\d{3}\. - 一个数字,一个句点,三个数字,一个句号,或
  • \d{1,3}\. - 一个和三个数字,一个句号
  • 以上都不是(因为?

然后,我们匹配:

  • \d{1,3}, - 一到三位数字和一个逗号,后跟
  • \d{1,2} - 一位或两位数字

答案 1 :(得分:0)

+之后添加]以允许不止一个字符。