feat: align with upstream 1.5.9.9
This commit is contained in:
@@ -0,0 +1,32 @@
|
||||
// 解析班级批量输入:逗号/换行分隔;数字区间 "1-10" 生成 "1班".."10班"(上限 100 防呆)
|
||||
|
||||
const MAX_RANGE_LENGTH = 100
|
||||
|
||||
export const parseClassInput = (text: unknown): string[] => {
|
||||
if (typeof text !== 'string') return []
|
||||
|
||||
const segments = text
|
||||
.split(/[,,\n;;]/)
|
||||
.map((segment) => segment.trim())
|
||||
.filter(Boolean)
|
||||
|
||||
const result: string[] = []
|
||||
|
||||
for (const segment of segments) {
|
||||
const rangeMatch = segment.match(/^(\d+)-(\d+)$/)
|
||||
if (rangeMatch) {
|
||||
const start = parseInt(rangeMatch[1], 10)
|
||||
const end = parseInt(rangeMatch[2], 10)
|
||||
if (start >= 1 && end >= start && end - start < MAX_RANGE_LENGTH) {
|
||||
for (let i = start; i <= end; i++) {
|
||||
result.push(`${i}班`)
|
||||
}
|
||||
continue
|
||||
}
|
||||
}
|
||||
|
||||
result.push(segment)
|
||||
}
|
||||
|
||||
return [...new Set(result)]
|
||||
}
|
||||
Reference in New Issue
Block a user