if (preg_match_all('((([£€$¥](([ 0-9]([0-9])*)((\.|\,)(\d{2}|\d{1}))|([ 0-9]([0-9])*)))|(([0-9]([0-9])*)((\.|\,)(\d{2}|\d{1})(\s{0}|\s{1}))|([0-9]([0-9])*(\s{0}|\s{1})))[£€$¥]))', $Commande, $matches)) {
$tot1 = $matches[0];
这是我测试过的解决方案。正则表达式 - 在前面提取数字或后面跟着货币符号
它适用于所有4种货币,当标志放置在之前或之后时,有或没有空格时。 它使用小数点或逗号作为小数。 它工作时没有十进制,或者在点或逗号后面只有一个数字。 只要中间存在空格,它就会以相同的字符串提取多个格式的混合格式。
我认为它涵盖了一切,虽然我相信它可以被简化。
客户输入金额本身以及相同领域的描述时,需要国际订单。
心灵解释所有的场景(火柴和失败的例子),你想捕捉?它看起来像你的整个表达式可以清理。 – Sam
您的RegEx不好。第一种可能性(一个没有百万/十亿/等)匹配例如'$,.24'。 – tenub