【问题标题】:Function that pads with zeros an input number用零填充输入数字的函数
【发布时间】:2018-09-01 01:00:35
【问题描述】:

我在这里遇到了一个严重的问题。我有一个用零填充用户输入的函数。例如,如果我输入 88 它会将其标准化为: 00000088。我的功能是这样的:

export default length => (value) => {
  const noLeadingZeros = value.toString().replace(/(0+)/, '');
  if (noLeadingZeros.length === 0) {
    return value;
  }
  return padLeft(noLeadingZeros, length);
};

用 padleft 是:

export default (num, len) => (
  len > num.toString().length ? '0'.repeat(len - num.toString().length) + num
    : num
);

我的问题是,如果我输入这样的内容: 80112345 将其转换为 08112345。有什么想法吗?

【问题讨论】:

  • 替换错误...它是干什么用的?
  • 如果您只是要重新添加前导零,为什么需要删除它们?
  • 锚定正则表达式:/^(0+)/ 现在,您要从字符串中删除 所有 0 字符。
  • 在什么情况下 number.tostring 会给你前导零?

标签: javascript regex padding


【解决方案1】:

在您的替换中,您将替换数字中的所有零,而不仅仅是左侧的零,即使左侧有零,如果您只是要将它们添加回来,为什么要删除它们。您可以使用 for 循环将字符串填充为零 n 次(其中 n 是字符串需要长度为 8 的位数),或者(感谢@AndrewBone 的评论),您可以使用为您执行此操作的 .repeat() 函数:

function padLeft(value, len) {
  return '0'.repeat(String(value).length < len ? len - String(value).length : 0) + value;
}
console.log(padLeft("", 8));
console.log(padLeft("88", 8));
console.log(padLeft("00088", 8));
console.log(padLeft("12312388", 8));
console.log(padLeft("00000000", 8));

【讨论】:

【解决方案2】:

使用slice

let str = '00000000' + 88;
let resp = str.slice(-8, str.length)
console.log(resp) // 00000088

【讨论】:

    【解决方案3】:

    只需使用正则表达式来断言该数字是有效数字。

    /0+/
    

    然后获取数字中的位数:

    ('' + num).length;
    

    然后把整个东西放在一起

    var paddedNum ='';
    for (var i=0;i<8-len;i++) {
      paddedNum += "0";
    }
    paddedNum += num;
    

    【讨论】:

      【解决方案4】:

      这看起来不对:

      const noLeadingZeros = value.toString().replace(/(0+)/, '');
      

      您正在删除号码中的每一个零......即使是里面的那些!

      您可以使用此正则表达式,而不是代码中的/(0+)/

       /\b(0+)/
      

      解释:\b 确保零在单词的开头

      或者这个

       /^(0+)/
      

      解释:^ 确保这是字符串的开头

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-01-12
        • 1970-01-01
        • 1970-01-01
        • 2012-06-10
        • 2016-08-20
        • 2021-08-23
        • 2013-08-09
        • 1970-01-01
        相关资源
        最近更新 更多