0
1.449,00
1.000.000,55
19,90
etc
etc

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

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

2 回答 2

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*选择任何可选的货币分数。

您可以看到它通过了所有测试

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

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

我们匹配的地方:

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

然后,我们匹配:

  • \d{1,3},- 一到三位数字和一个逗号,后跟
  • \d{1,2} - 一位或两位数
于 2012-08-07T16:23:24.577 回答
0

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

于 2012-08-07T16:16:37.577 回答