不允许使用表情符,请使用符合要求的 UTF-8 字符、 "/" 用于分割路径,可快速创建子目录,但不要以 "/" 或 "\" 开头,不要出现连续的 "/" 允许出现名为 ".." 的子目录、总长度控制在 1-254 个字符。
###你的描述不是很严谨,给点例子就清晰了。你看这些例子对不对,不对我再改改。
方法:白盒测试-单元测试(尽可能多的例子遍历每条规则,正确错误的例子都需要)
代码:浏览器-F12 键-粘贴到控制台运行(以免初学者不知道,给点提示而已)
const unitTest = (() => {
// 正则含义:中文(不包含标点),英文数字,或者'..'
// 可以以'/'结束
// 多次重复
const reg = /^(([\u4e00-\u9fa5A-Za-z0-9]+|\.{2})\/?)+$/
const expList = [
// 正确
{ value: 'a/', expect: true },
{ value: 'a/ab/abc', expect: true },
{ value: 'a/ab/abc/', expect: true },
{ value: 'a/洛克人/abc', expect: true },
{ value: 'a/../abc', expect: true },
{ value: 'a/ab/../d', expect: true },
{ value: 'a/ab/../../', expect: true },
// 错误
{ value: '/a/ab/', expect: false },
{ value: 'a/ab/?/d', expect: false },
{ value: 'a//ab', expect: false },
{ value: 'a/ab/.../d', expect: false },
]
expList.forEach(item => {
const { value, expect } = item
const res = reg.test(value)
console.log(`pass: ${res === expect ? '??' : '?'}, expect:${expect} value: ${value}`)
})
})()
至于总长度,正则有「重复类」的功能,但是没有「检测字符长度」的功能。你可以在下一步判断 length 小于 254(不需要判断大于 1)。