PHP如何清理货币值并转为整数?去除全球货币符号方案
搞定货币值清理:保留千位分隔符`,移除各类货币符号
嘿,我明白你的需求:要把带$、€、CHF这些货币符号的数值,清理成只保留数字、小数点,还有作为千位分隔符的,对吧?你之前试的正则/[^0-9,.`]/`其实方向是对的,但可能是使用时的小细节出问题才导致`被误删了。
正确的解决思路
核心就是:只保留我们需要的字符(数字0-9、小数点.、千位分隔符`),把所有其他字符(货币符号、空格之类的)全部删掉。
正则表达式推荐
直接用这个全局匹配的正则就好:
/[^0-9.`]/g
(如果你的场景里还有用逗号,当小数点的情况,就把逗号加进去,变成/[^0-9.,]/g`)
实际代码示例(拿JavaScript举例)
function cleanCurrencyValue(str) { // 替换所有非数字、非小数点、非`的字符为空 return str.replace(/[^0-9.`]/g, ''); } // 测测你的示例 console.log(cleanCurrencyValue('€ 2.66')); // 输出 "2.66" console.log(cleanCurrencyValue('445.77 €')); // 输出 "445.77" console.log(cleanCurrencyValue('$ 4561.44')); // 输出 "4561.44" console.log(cleanCurrencyValue('CHF 3`009.55')); // 输出 "3`009.55"
要是用Python的话,代码长这样:
import re def clean_currency_value(s): return re.sub(r'[^0-9.`]', '', s) # 测试用例 print(clean_currency_value('€ 2.66')) # 输出 "2.66" print(clean_currency_value('CHF 3`009.55')) # 输出 "3`009.55"
为啥你之前的正则会出问题?
如果你的/[^0-9,.]/把删掉了,大概率是这几个小问题:
- 不小心给
加了转义符,写成了`——虽然大部分正则引擎里不需要转义,但转义后可能会导致匹配异常; - 替换逻辑搞反了:比如你是提取匹配的字符,而不是把非匹配的字符替换为空;
- 输入里的
是全角符号?如果是全角的,得把它也加到正则的保留列表里。
进阶:适配更多格式
要是你还遇到其他千位分隔符(比如逗号),直接把它加到正则里就行,比如/[^0-9.,]/g,这样就能同时支持逗号和作为千位分隔符的场景了。
内容的提问来源于stack exchange,提问作者user759235
相关产品推荐
相关产品推荐

