编写价格处理正则表达式:替换逗号并保留两位小数
解决方案
分步处理逻辑
需求可以拆为两个独立步骤,分步处理更直观,也能避免复杂正则带来的错误:
- 统一小数点格式:把输入中所有逗号替换为点,解决格式不一致问题;
- 截断超长小数位:对标准化后的字符串,仅保留小数点后最多两位数字,多余部分直接截断。
代码实现示例
JavaScript版本
function formatPrice(input) { // 第一步:将所有逗号替换为小数点 let normalized = input.replace(/,/g, '.'); // 第二步:截断小数点后超过两位的部分 normalized = normalized.replace(/\.(\d{2})\d+/, '.$1'); return normalized; } // 测试验证 console.log(formatPrice('6554,43553')); // 输出:6554.43 console.log(formatPrice('123.4567')); // 输出:123.45 console.log(formatPrice('789')); // 输出:789 console.log(formatPrice('987,6')); // 输出:987.6
Python版本
import re def format_price(input_str): # 替换逗号为小数点 normalized = input_str.replace(',', '.') # 截断超长小数位 normalized = re.sub(r'\.(\d{2})\d+', r'.\1', normalized) return normalized # 测试验证 print(format_price('6554,43553')) # 输出:6554.43
正则规则说明
- 替换逗号的正则
/g标识是全局匹配,确保所有逗号都被替换; - 截断小数位的正则
\.(\d{2})\d+:\.匹配小数点;(\d{2})捕获小数点后前两位数字;\d+匹配后面多余的数字;- 替换为
.$1时,仅保留小数点和捕获到的两位数字,实现截断效果。
特殊情况说明
如果输入包含千分位逗号(比如1,234.5678),需要先移除千分位逗号再处理:
// 先移除千分位逗号 let normalized = input.replace(/(\d),(?=\d{3})/g, '$1'); // 再执行后续替换和截断步骤
内容的提问来源于stack exchange,提问作者user23986535
相关产品推荐
相关产品推荐

