提问者:小点点

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个答案

匿名用户

像这样的方法应该会奏效:

/^((?:\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*提取货币的任何可选分数。

你可以看到它通过了你所有的测试。

编辑:更新的正则表达式如下所示:

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

如果我们匹配:

  • \d\.\d{3}\.-一位数,一个句点,三位数,一个句点,OR
  • \d{1,3}\。-1和3位数,一个句点
  • 以上都不是(因为

然后,我们匹配:

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

匿名用户

]之后添加,以允许多个字符。