57 lines
1.6 KiB
TypeScript
57 lines
1.6 KiB
TypeScript
|
|
// 获取下一个编号
|
|||
|
|
export function getNextNumber(oldNumber: string): string | null {
|
|||
|
|
// 检查是否为空
|
|||
|
|
if (!oldNumber) return null;
|
|||
|
|
|
|||
|
|
// 分离前缀和数字部分
|
|||
|
|
const prefixMatch = oldNumber.match(/^[A-Za-z]*/);
|
|||
|
|
const prefix = prefixMatch ? prefixMatch[0] : '';
|
|||
|
|
const numberPart = oldNumber.slice(prefix.length);
|
|||
|
|
|
|||
|
|
// 检查数字部分是否有效
|
|||
|
|
if (!/^\d+$/.test(numberPart)) {
|
|||
|
|
return null; // 无效的数字部分
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 将数字部分转为整数并加1
|
|||
|
|
const number = parseInt(numberPart, 10) + 1;
|
|||
|
|
|
|||
|
|
// 保持原有的数字位数,用0填充(next保持补0逻辑不变)
|
|||
|
|
const nextNumberPart = number.toString().padStart(numberPart.length, '0');
|
|||
|
|
|
|||
|
|
// 拼接前缀和新的数字部分
|
|||
|
|
return prefix + nextNumberPart;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 获取上一个编号,处理边界情况
|
|||
|
|
export function getPreviousNumber(oldNumber: string): string | null {
|
|||
|
|
// 检查是否为空
|
|||
|
|
if (!oldNumber) return null;
|
|||
|
|
|
|||
|
|
// 分离前缀和数字部分
|
|||
|
|
const prefixMatch = oldNumber.match(/^[A-Za-z]*/);
|
|||
|
|
const prefix = prefixMatch ? prefixMatch[0] : '';
|
|||
|
|
const numberPart = oldNumber.slice(prefix.length);
|
|||
|
|
|
|||
|
|
// 检查数字部分是否有效
|
|||
|
|
if (!/^\d+$/.test(numberPart)) {
|
|||
|
|
return null; // 无效的数字部分
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 将数字部分转为整数
|
|||
|
|
const number = parseInt(numberPart, 10);
|
|||
|
|
|
|||
|
|
// 处理边界情况:如果已经是1,则保持不变
|
|||
|
|
if (number <= 1) {
|
|||
|
|
return oldNumber;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 数字减1
|
|||
|
|
const previousNumber = number - 1;
|
|||
|
|
|
|||
|
|
|
|||
|
|
const previousNumberPart = previousNumber.toString();
|
|||
|
|
|
|||
|
|
// 拼接前缀和新的数字部分
|
|||
|
|
return prefix + previousNumberPart;
|
|||
|
|
}
|