首页 > 解决方案 > 根据数据动态屏蔽输入

问题描述

我有回复,它返回“XXX-XXX”或“XX-XXXX”

const formatUnitCode = (value, format) => {}

所以基本上,我想看到formatUnitCode("123456", "XX-XXX") --> "12-3456"

我不想使用 if else 因为它可能会在未来以 XX-XX-XX 的形式出现

有人可以帮我创建这个功能吗?

我尝试使用正则表达式,但我认为不可能传递变量而不是 {2} 和 {4}

const formatCode = (val) => val.replace(/(\d{2})(\d{4})/g, "$1-$2");

标签: javascriptregexmaskedinput

解决方案


无论使用什么字母,这都适用于任何掩码(您可以通过更改匹配器正则表达式来控制该行为)。就个人而言,我认为这是一种比仅仅尝试将给定的掩码与正则表达式匹配更灵活的方法。

const replaceWithFiller = (filler, str, matcher = /[a-zA-z]/g) => {
  const arr = filler.split('');
  return  str.replace(matcher, () => arr.shift());
};


console.log(replaceWithFiller('123456', 'XXX-XXX')); //"123-456"
console.log(replaceWithFiller('123456', 'XX-XX-XX')); // "12-34-56"
console.log(replaceWithFiller('123456', 'XX-XXXX')); //"12-3456"
console.log(replaceWithFiller('123456', 'aa-aaaa')); // also "12-3456"


推荐阅读