正则表达式移除价格输入中的美元符号及末尾零问题咨询
解决价格格式化问题:移除$和小数点后末尾零
嘿,我明白你要处理价格格式的需求了——去掉美元符号$,同时移除小数点后末尾的零,如果小数点后全是零的话连小数点也一起去掉对吧?你之前用的[.0]+$正则有问题,因为它会把所有末尾的点和零都删掉,但没法区分“末尾零”和中间非零数字后的零,也处理不掉开头的$。
解决方案
我们可以通过两步正则替换来实现需求,代码清晰且容易理解:
function formatPrice(priceStr) { return priceStr .replace(/^\$/, '') // 移除开头的美元符号$ .replace(/\.?0*$/, ''); // 移除末尾的零及多余小数点 }
验证你的示例
我们用你给出的测试用例来验证:
formatPrice("$100")→ 返回"100"formatPrice("$10.000")→ 返回"10"formatPrice("$10.0100")→ 返回"10.01"formatPrice("$10.1234")→ 返回"10.1234"
正则解释
- 第一个正则
/^\$/:^匹配字符串开头,\$转义后匹配美元符号,替换为空就去掉了开头的$。 - 第二个正则
/\.?0*$/:\.?:匹配可选的小数点(?表示该字符出现0次或1次)0*:匹配任意数量的零(包括0个)$:匹配字符串结尾
这个正则会精准匹配字符串末尾的“小数点+任意零”或者“纯零”,替换为空后就正好满足你的格式要求。
内容的提问来源于stack exchange,提问作者Robin
相关产品推荐
相关产品推荐

