用零填充输入数字的功能

时间:2018-03-22 14:27:33

标签: javascript regex padding

我在这里遇到了严重的问题。我有一个用零填充用户输入的功能。例如,如果我输入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.任何想法?

4 个答案:

答案 0 :(得分:2)

在你的替换中,你正在替换数字中的所有零而不仅仅是左侧的零,即使左侧有零,为什么要删除它们,如果你只是要将它们添加回去。您可以使用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));

答案 1 :(得分:2)

使用slice

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

答案 2 :(得分:1)

这看起来不对:

<a href="data:image/gif;base64,R0l...QA7" download="some_name.gif">
    <img src="data:image/gif;base64,R0l...QA7" width="16" height="14" alt="embedded folder icon"/>
</a>

你正在删除你的号码中的每个零...甚至是那些内部!

您可以改为使用此正则表达式,而不是代码中的const noLeadingZeros = value.toString().replace(/(0+)/, '');

/(0+)/

解释: /\b(0+)/ 确保零位于单词的开头

或者

\b

解释: /^(0+)/ 确保这是字符串的开头

答案 3 :(得分:1)

只需使用RegEx断言该号码是有效号码。

unsigned char  enc_out[n];

然后获取数字中的位数:

/0+/

然后把整个事情放在一起

('' + num).length;