Một mã đã được thêm số 0 ở đầu vẫn có thể sai định dạng hoặc vượt độ dài cho phép. padStart xử lý cách trình bày chuỗi. Muốn dùng cho mã đơn hàng, mã thiết bị hoặc số thứ tự, hãy xác định contract dữ liệu trước rồi mới định dạng.
1. Độ dài đích không phải giới hạn tối đa
console.log('27'.padStart(6, '0')); // 000027
console.log('1234567'.padStart(6, '0')); // 1234567
console.log('1234567'.padStart(6, '0').length); // 7
padStart thêm phần đệm vào đầu khi chuỗi chưa đạt độ dài đích; chuỗi đã dài hơn được giữ nguyên. Xem MDN padStart. Ví dụ cho thấy gọi padStart(6, '0') không chứng minh kết quả luôn có đúng sáu ký tự.
Nếu giao diện hoặc file xuất yêu cầu đúng sáu chữ số, phải từ chối đầu vào quá dài theo contract. Cắt lấy sáu ký tự cuối để ép vừa ô hiển thị có thể làm hai mã khác nhau trông giống nhau; đó là thay đổi định danh, không đơn thuần định dạng.
2. Chuỗi rỗng và dấu âm vẫn được thêm đệm
console.log(''.padStart(4, '0')); // 0000
console.log('-7'.padStart(4, '0')); // 00-7
console.log('A7'.padStart(4, '0')); // 00A7
Các kết quả này là phép xử lý chuỗi đúng với lời gọi, nhưng có thể không hợp lệ với loại mã sản phẩm đang dùng. Đặc biệt, giá trị chưa được nhập có thể biến thành một mã trông có vẻ hoàn chỉnh nếu ứng dụng đệm chuỗi rỗng.
Nếu miền dữ liệu cho phép số âm, cần thiết kế cách định dạng dấu riêng. Nếu mã chỉ được phép có chữ số ASCII, hãy kiểm tra điều đó thay vì mong padStart tự hiểu quy tắc.
3. Xác thực trước, định dạng sau
function formatSixDigitCode(value) {
if (typeof value !== 'string') {
throw new TypeError('code must be a string');
}
if (value.length < 1 || value.length > 6 || /[^0-9]/.test(value)) {
throw new RangeError('code must contain 1 to 6 ASCII digits');
}
return value.padStart(6, '0');
}
console.log(formatSixDigitCode('7')); // 000007
console.log(formatSixDigitCode('0012')); // 000012
Contract minh họa nhận chuỗi từ một đến sáu chữ số ASCII, giữ số 0 đầu và xuất chuỗi sáu ký tự. Hàm không tự trim, không chuyển Number thành chuỗi và không chấp nhận dấu, khoảng trắng hoặc chữ số của bảng chữ số khác.
Mã '0' được phép về mặt cú pháp trong helper này. Nếu doanh nghiệp cấm mã toàn số 0 hoặc dành một khoảng cho hệ thống, bổ sung quy tắc đó riêng. Đúng mẫu chuỗi cũng chưa chứng minh mã tồn tại hoặc người dùng được quyền truy cập bản ghi tương ứng.
4. Định dạng có thể hợp nhất hai cách viết
const first = '7'.padStart(6, '0');
const second = '0007'.padStart(6, '0');
console.log(first === second); // true
console.log(JSON.stringify({ code: first })); // {"code":"000007"}
Ví dụ thể hiện một quyết định quan trọng: '7' và '0007' có phải cùng một mã hay không? Nếu đúng, đầu ra có thể dùng làm cách viết chuẩn. Nếu hai chuỗi là định danh khác nhau, đệm về cùng độ dài không phù hợp để tạo khóa tra cứu.
Giữ định dạng chuẩn dưới dạng chuỗi trong contract API và trường lưu trữ phù hợp. Khi nhập từ bảng tính hoặc hệ thống khác, kiểm tra giá trị nhận được còn đúng chuỗi không; chỉ xem giao diện hiển thị có số 0 đầu là chưa đủ để xác nhận dữ liệu trao đổi.
5. Test cả đầu vào bị từ chối
- Một chữ số, đủ sáu chữ số và bảy chữ số.
- Chuỗi rỗng, khoảng trắng và ký tự xuống dòng.
- Dấu âm, dấu cộng và chữ xen trong mã.
- Number, null và undefined thay cho chuỗi.
- Hai cách viết có số 0 đầu khác nhau và quy tắc nhận diện của sản phẩm.
Tám khối mã Việt–Anh đã chạy bằng Node.js, kèm kiểm tra các trường hợp sai kiểu, quá dài, ký tự không hợp lệ và tính ổn định khi định dạng lại. Chưa tích hợp API, bảng tính hoặc dữ liệu nghiệp vụ thật.




Chưa có bình luận. Hãy là người đầu tiên chia sẻ ý kiến.