【问题标题】:preg_match() or similar function for checking currencypreg_match() 或用于检查货币的类似函数
【发布时间】:2012-08-07 16:14:49
【问题描述】:
1.449,00
1.000.000,55
19,90
etc
etc

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

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

【问题讨论】:

标签: php regex syntax preg-match


【解决方案1】:

这样的事情应该可以工作:

/^((?:\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} - 一位或两位数

【讨论】:

  • 我想我在你回答后修改了语法以减少可能性,所以只有2 or 1 digit comes after commamax 7 digits before comma and separated with dots only。上面的链接给了我“服务器错误”。很抱歉让您感到痛苦,但我们可以为这种简化模式修改您的代码吗?谢谢
  • @MadMax - 我已经更新了我的答案,它应该是你要找的。​​span>
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2015-01-11
    • 2014-03-25
    • 2014-08-01
    • 2019-10-24
    • 1970-01-01
    • 1970-01-01
    • 2015-07-25
    • 1970-01-01
    • 2015-08-06
    相关资源
    最近更新 更多