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