字符串掩码化

11
我需要将接收到的字符串按照以下格式进行处理:
"## ## ## ###",使用typescript/javascript编程语言
例如:
"12 34 56 789"
我知道可以使用string-mask或者通过JQuery来实现,但是否有更简单的方法呢?
3个回答

43

您可以用所需的数据替换每个模式部分。

function format(value, pattern) {
    let i = 0;
    const v = value.toString();
    return pattern.replace(/#/g, _ => v[i++]);
}

console.log(format(123456789, '## ## ## ###'));


@Nina Scholz 在 replace 方法中下划线字符 (_) 的含义是什么? - Penny Liu
1
它是一个未使用的变量,比 () => v[i++] 更短,而后者是一个没有参数的函数。下划线是一个变量。 - Nina Scholz
@NinaScholz 感谢您的回复,但是当值为 023456789 时,我得到了一个意外的结果 23 45 67 89undefined - Penny Liu
键盘抬起事件 @NinaScholz - CandleCoder
@CandleCoder,如果你将它添加到事件中呢?为什么不呢? - Nina Scholz
显示剩余4条评论

2
我需要一个能够将字符串开头或结尾的任意字符都替换成"*"的函数,因此我编写了以下代码:
"use strict";

module.exports = {
  /**
   * @param {string} str
   * @param {string} maskChar
   * @param {number} unmaskedLength
   * @param {boolean} [maskFromStart]
   * @returns {string}
   */
  mask(str, maskChar, unmaskedLength, maskFromStart = true) {
    const maskStart = maskFromStart ? 0 : Math.max(0, unmaskedLength);
    const maskEnd = maskFromStart ? Math.max(0, str.length - unmaskedLength) : str.length;
    return str
      .split("")
      .map((char, index) => {
        if (index >= maskStart && index < maskEnd) {
          return maskChar;
        }
        else {
          return char;
        }
      })
      .join("");
  },
};

0

对于我而言,格式为xxx-xxx-xxxx,使用keyup 事件的方法是有效的。

stringOnKeyUp.replace(/^(\d{3})$/g, '$1-').replace(/^(\d{3}-\d{3})$/g, '$1-');


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接