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 :(得分: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;