这个JavaScript正则表达式如何编写,求大佬赐教

不允许使用表情符,请使用符合要求的 UTF-8 字符、 "/" 用于分割路径,可快速创建子目录,但不要以 "/" 或 "\" 开头,不要出现连续的 "/" 允许出现名为 ".." 的子目录、总长度控制在 1-254 个字符。

阅读 1.3k
1 个回答

你的描述不是很严谨,给点例子就清晰了。你看这些例子对不对,不对我再改改。

方法:白盒测试-单元测试(尽可能多的例子遍历每条规则,正确错误的例子都需要)
代码:浏览器-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)。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题