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;
|
||
} |