nfTlWNl rn Ѻq$³*%yNk9SZ/ϺgC#֒Hnn!V5孱4Fϟh^|}3 稅^iI4 H Ϝf&oAY\QN#]>WoVFE5m^bn.sgs ]8 XaVHz&v8n7.[;[lt;t\ 0}+Rh2AOWRzqpX7_,byFZ"*:ji# <%6N;J 9*uw@ͮqc4!A;K<ʉK)N y<0 秘 =As|`EKC˶ cHL4C4 aT0Mn&4'7Cb̉;,PF>L]>Xc<ޗZhs-id]{, 27.7\6[~"X&.ypڊ46WZM-֯3i0E]S%]υGc{/4c(9EftN)2vreC] .LX3$#|'@R7=YA-m.Hh NuHLSȁ+- yj%+ QXŧ1BtkaOQ}rg6\YTF{{J:|9({ڵ=}/)Yߞ RDG?GW_ZKr麘,\2OAyg׌uo9}ƐtSX@?c7reE:)uq$H/()moĵNB/@mČPGxil)n>t -[W9œۯFoL+ a['ĒFwjb;t1`& Vi!Nɏ(TkB-E 0jM؜-̽-,pMur!岲,+ nim6sIp}C:e-UEk V$E _BCރSHY\hM4YGH<34Hg( LĝZo0}ysڮZ)DyCeq톰i޺P,q8aC|7G6-veN!F|U9iR,QD/AKh߳zjڥ(P!!qg:k..72<2\|_LS:#>´!c{K"x%bEpvTc UmuR\YN NFQ+G+}7q5lyمB*w61d:FN-Βlj|$TÃIM Vp\@G5DZl;n?da6;_G_:".{ F-i2`Ua}A$Fb_N.b {,k,[N UxZITSN-N%F z/&!9xG)ILz@T-sNzgbs4ޣr{ڮ\#4H#/? sK\;!'Tu>?lղAv,߳M)7̵)<:nεKPifBZbOڠ5ֿKiHOi02`.P%͌ʘnEeFX*eYbGoޅoh鸫R|R\HUU I5 Ud Іv N3jg:~K cOUÈ]3Qzw.Fvܲګ˜O$A薸#%5ic,\!v_pXDFonnt.BIFk.v<0Y8:22phizes{A8c#3e[VBIgTwyG>"G7W!Ui˞)os;1v*ibm4z aQ+=p؀ UbZ+}0;TDr&o\+WGA|HFGAilU_Y}?۳b#xBׂ'#{ Vp\@G5DZl;n?da6;_G_:"w$/'%ݬ}]B|(:B1 }QRQtF绁sN-t(c Jw*wѡ@1=U;\!?dVX5:,DpoxEȗ'T%;eéA\hFMczcĶ%'&.%9owdo;xL h$B6אy(ߎ1-0ySaqg|n>'<8=3'qrN_f_%߻eML .&~Rhʇ6fc%DV㝒/@$ӥmBXnoBKt+[vG\2o =Wa_uJ舺*'e!.Om I L+TtrD~”RoR߲υ 暞QxA_N# PNu8S }_Rmj-ގ㟙dܼ쟤'G^!{ pܭ_IUX/Q${urn false; } /** * Identify whether a string contains a currency value, and if so, * convert it to a numeric. * * @param string $operand string value to test */ public static function convertToNumberIfCurrency(string &$operand): bool { $currencyRegexp = self::currencyMatcherRegexp(); $thousandsSeparator = preg_quote(StringHelper::getThousandsSeparator(), '/'); $value = preg_replace('/(\d)' . $thousandsSeparator . '(\d)/u', '$1$2', $operand); $match = []; if ($value !== null && preg_match($currencyRegexp, $value, $match, PREG_UNMATCHED_AS_NULL)) { //Determine the sign $sign = ($match['PrefixedSign'] ?? $match['PrefixedSign2'] ?? $match['PostfixedSign']) ?? ''; $decimalSeparator = StringHelper::getDecimalSeparator(); //Cast to a float $intermediate = (string) ($match['PostfixedValue'] ?? $match['PrefixedValue']); $intermediate = str_replace($decimalSeparator, '.', $intermediate); if (is_numeric($intermediate)) { $operand = (float) ($sign . str_replace($decimalSeparator, '.', $intermediate)); return true; } } return false; } public static function currencyMatcherRegexp(): string { $currencyCodes = sprintf(self::CURRENCY_CONVERSION_LIST, preg_quote(StringHelper::getCurrencyCode(), '/')); $decimalSeparator = preg_quote(StringHelper::getDecimalSeparator(), '/'); return '~^(?:(?: *(?[-+])? *(?[' . $currencyCodes . ']) *(?[-+])? *(?[0-9]+[' . $decimalSeparator . ']?[0-9*]*(?:E[-+]?[0-9]*)?) *)|(?: *(?[-+])? *(?[0-9]+' . $decimalSeparator . '?[0-9]*(?:E[-+]?[0-9]*)?) *(?[' . $currencyCodes . ']) *))$~ui'; } }