JavaScript如何用REGEX去除多IF判断 实现CPF输入实时格式化
可以实现,你可以通过正则分组捕获配合替换回调的方式完全去掉所有IF判断,和原逻辑输出完全一致,优化后的代码如下:
function getFormatedCPF(unformatedValue) { const onlyDigits = unformatedValue.toString().replace(/[^\d]/g, "").substring(0, 11); return onlyDigits.replace(/^(\d{3})(\d{0,3})(\d{0,3})(\d{0,2})$/, (_, p1, p2, p3, p4) => `${p1}${p2 ? '.' + p2 : ''}${p3 ? '.' + p3 : ''}${p4 ? '-' + p4 : ''}` ); }
实现说明
- 正则
/^(\d{3})(\d{0,3})(\d{0,3})(\d{0,2})$/会将最多11位的纯数字拆分为4个捕获组:- 第一组固定匹配前3位数字
- 第二组匹配第4到第6位(不足3位则匹配实际存在的位数)
- 第三组匹配第7到第9位(不足3位则匹配实际存在的位数)
- 第四组匹配第10到第11位(不足2位则匹配实际存在的位数)
- 替换回调会根据捕获组是否存在值,自动拼接对应的分隔符,完全对齐你原有的多IF判断逻辑,适配用户输入过程中任意长度的中间状态。
效果验证
所有场景输出和原逻辑完全一致:
- 输入
99→ 输出99 - 输入
9999→ 输出999.9 - 输入
9999999→ 输出999.999.9 - 输入
99999999901→ 输出999.999.999-01
内容的提问来源于stack exchange,提问作者Paulo Künzel
相关产品推荐
相关产品推荐

