diff --git a/src/index.js b/src/index.js index bd86f4da..11b99408 100644 --- a/src/index.js +++ b/src/index.js @@ -44,6 +44,7 @@ export { default as setDataURLPrefix } from './setDataURLPrefix'; export { default as normalizeString } from './normalizeString'; export { default as safeDate } from './safeDate'; export { default as formatMobile } from './formatMobile'; +export { default as padZero } from './padZero'; /** * 数学计算,修正浮点数计算问题 diff --git a/src/padZero.js b/src/padZero.js new file mode 100644 index 00000000..aafae4cc --- /dev/null +++ b/src/padZero.js @@ -0,0 +1,39 @@ +import normalizeString from './normalizeString'; + +/** + * 前置补零 + * + * @static + * @alias module:Processor.padZero + * @since 4.7.0 + * @param {string|number} value 要处理的值 + * @param {number} [size=2] 指定字符串长度 + * @returns {string} 用零填充数字到给定长度的字符串 + * @example + * padZero(5); // '05' + * padZero('5'); // '05' + * + * padZero(12); // '12' + * padZero('12'); // '12' + * + * padZero(688); // '688' + * padZero('688'); // '688' + * + * padZero(688, 5); // '00688' + * padZero('688', 5); // '00688' + */ +function padZero(value, size = 2) { + const str = normalizeString(value); + const len = str.length; + + if (typeof size !== 'number' || size < 0) { + size = 0; + } + + if (len < size) { + return '0'.repeat(size - len) + str; + } + return str; +} + +export default padZero; diff --git a/test/processor/padZero.test.js b/test/processor/padZero.test.js new file mode 100644 index 00000000..9aae32a6 --- /dev/null +++ b/test/processor/padZero.test.js @@ -0,0 +1,63 @@ +import { padZero } from '../../src'; + +describe('padZero', () => { + it('should be defined', () => { + expect(padZero).toBeDefined(); + }); + + it('correct', () => { + expect(padZero(0)).toBe('00'); + expect(padZero(0.2)).toBe('0.2'); + expect(padZero(1)).toBe('01'); + expect(padZero(9)).toBe('09'); + expect(padZero(10)).toBe('10'); + expect(padZero(28)).toBe('28'); + expect(padZero(688)).toBe('688'); + + expect(padZero(0, 3)).toBe('000'); + expect(padZero(0.2, 3)).toBe('0.2'); + expect(padZero(1, 3)).toBe('001'); + expect(padZero(9, 3)).toBe('009'); + expect(padZero(10, 3)).toBe('010'); + expect(padZero(28, 3)).toBe('028'); + expect(padZero(688, 3)).toBe('688'); + + expect(padZero(0, 5)).toBe('00000'); + expect(padZero(0.2, 5)).toBe('000.2'); + expect(padZero(1, 5)).toBe('00001'); + expect(padZero(9, 5)).toBe('00009'); + expect(padZero(10, 5)).toBe('00010'); + expect(padZero(28, 5)).toBe('00028'); + expect(padZero(688, 5)).toBe('00688'); + }); + + it('incorrect', () => { + expect(padZero()).toBe('00'); + expect(padZero(undefined)).toBe('00'); + expect(padZero(void 0)).toBe('00'); + expect(padZero(null)).toBe('00'); + + expect(padZero(undefined, 0)).toBe(''); + expect(padZero(undefined, 5)).toBe('00000'); + expect(padZero(null, 0)).toBe(''); + expect(padZero(null, 5)).toBe('00000'); + + expect(padZero(undefined, '')).toBe(''); + expect(padZero(undefined, '12')).toBe(''); + expect(padZero(undefined, null)).toBe(''); + expect(padZero(undefined)).toBe('00'); + + expect(padZero(false, '')).toBe('false'); + expect(padZero(false, '12')).toBe('false'); + expect(padZero(false, null)).toBe('false'); + expect(padZero(false, void 0)).toBe('false'); + + expect(padZero(true, '')).toBe('true'); + expect(padZero(true, '12')).toBe('true'); + expect(padZero(true, null)).toBe('true'); + expect(padZero(true, void 0)).toBe('true'); + + expect(padZero(true, 5)).toBe('0true'); + expect(padZero(true, true)).toBe('true'); + }); +});