php - 自由的货币正则表达式

标签 php regex

我正在开发 PHP 应用程序。我需要验证字符串是否可用作货币值。我想验证以下内容:

$5.00  
5  
5.00   
£5.00  

我希望模式足够自由以接受合理的字符串。我还希望它接受货币符号;但是,为了验证货币,它可以是任何字符,因为我最终会将值存储为两位小数 float 。因此,“$5.00”或“USD 5.00”存储在数据库中时将变为“5.00”。我目前正在使用以下内容:

preg_match('/^[0-9]*\.?[0-9]+$/',$value)

它适用于“5”或“5.00”,但不考虑货币符号。如何调整它以允许货币符号?

谢谢!

编辑:根据下面的评论,看起来我的正则表达式将允许太多小数。你也能帮我解决这个问题吗?

最佳答案

要允许所有货币符号,您需要使用 Unicode Character Properties

\p{Sc}\p{Currency_Symbol}:任何货币符号。

尝试一下这个:

$value=preg_replace('/^(\p{Sc}?\d*)((\.|,)\d\d\d)?\d*$/u','$1$2',$value);

但是如果您期望输入的数字,最好使用 form用户从可选列表中指定货币,只需注意用户是否只会输入数字,PAYPAL 就是这样做的。

关于php - 自由的货币正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6893600/

相关文章:

java - 通过正则表达式删除所有非打印字符

regex - 需要正则表达式来匹配单词或字符串结尾

javascript - 正则表达式从数组项中删除散列元素

php - Zend 框架优化 -> "preload everything"?

regex - 这是什么意思?使用表达式匹配什么字符串?

php - 通过PHP随机数生成 'word of the day'

javascript - HTML 使用 javascript、ajax、jquery 更改内容

python - 在连字符后跟数字之前使用正则表达式提取字符串的一部分

PHP 检索与 MYSQL

php - 更新时如何插入数据?