Module:BilibiliVideoIDValidator

Template-info.svg 模块文档  [查看] [编辑] [历史] [刷新]

测试用例(正确时返回空值,错误时返回分类:Bilibili视频ID错误):

  1. 若id为纯数字时,当首位不为0且长度在1-9位时合法:
    • id=114514
    • id=1145141919810(长度不对)
    • id=0114514(起始位为0)
  2. 若id为【av+纯数字】(不区分大小写,下同)时,当且仅当纯数字部分首位不为0且长度在1-9位时合法:
    • id=av114514
    • id=AV114514
    • id=av1145141919810(纯数字部分长度不对)
    • id=av0114514(纯数字部分起始位为0)
  3. 若id为【BV1】开头时,当且仅当id长度为12位,且除去【BV1】后的部分在仅包含大小写字母和数字的前提下均不包含小写字母l(L的小写)、大写字母I(i的大写)、大写字母O(o的大写)和数字0,且倒数第三位为7、第五位为1、第七位为4时合法:
    • id=bV1XX4X1X7XX
    • id=bV1ff14stxdy(不符合倒数第三位为7、第五位为1、第七位为4的要求)
    • id=bV1Il1O0fbqc(含有小写字母l、大写字母I、大写字母O和数字0)
    • id=bV1z?wsmphxg(含有非大小写字母和数字的字符)
    • id=bV1xxapi(长度不对)
  4. 若id为【1】开头时,当且仅当id长度为10位,且除去【1】后的部分在仅包含大小写字母和数字的前提下均不包含小写字母l(L的小写)、大写字母I(i的大写)、大写字母O(o的大写)和数字0,且倒数第三位为7、第五位为1、第七位为4时合法:
    • id=1XX4X1X7XX
    • id=1ff14stxdy(不符合倒数第三位为7、第五位为1、第七位为4的要求)
    • id=1Il1O0fbqc(含有小写字母l、大写字母I、大写字母O和数字0)
    • id=1z?wsmphxg(含有非大小写字母和数字的字符)
    • id=1xxapi(长度不对)
  5. 若id不满足上述四种情况时,当且仅当id长度为9位,且在仅包含大小写字母和数字的前提下均不包含小写字母l(L的小写)、大写字母I(i的大写)、大写字母O(o的大写)和数字0,且倒数第三位为7、第五位为1、第七位为4时合法:
    • id=XX4X1X7XX
    • id=1X4X1X7XX→(正确,避免出现1开头的9位id被错认为带有前缀1的10位格式的错误)
    • id=ff14stxdy(不符合倒数第三位为7、第五位为1、第七位为4的要求)
    • id=Il1O0fbqc(含有小写字母l、大写字母I、大写字母O和数字0)
    • id=z?wsmphxg(含有非大小写字母和数字的字符)
    • id=xxapi(长度不对)
  1. return {
  2. validation = function(frame)
  3. local result = true
  4. local id = mw.text.trim(frame.args.id or '')
  5. if mw.ustring.match(id, '^%d+$') then
  6. -- 纯数字
  7. if not (string.sub(id, 1, 1) ~= '0' and string.len(id) <= 9) then -- 若id为纯数字时,当首位不为0且长度在1-9位时合法。
  8. result = false
  9. end
  10. elseif mw.ustring.match(id, '^[aA][vV]%d+$') then
  11. -- 若id为【av+纯数字】(不区分大小写)时,当且仅当纯数字部分首位不为0且长度在1-9位时合法,其余情况添加分类
  12. if not (string.sub(id, 3, 3) ~= '0' and string.len(id) <= 11) then
  13. result = false
  14. end
  15. elseif mw.ustring.match(id, '4.1.7..$') then
  16. if string.len(id) == 12 then
  17. -- 若id为【BV1】开头时,当且仅当id长度为12位,且除去【BV1】后的部分均不包含小写l大写I、大写O和数字0时合法。
  18. if not mw.ustring.match(id, '^[bB][vV]1[a-km-zA-HJ-NP-Z0-9]+$') then
  19. result = false
  20. end
  21. elseif string.len(id) == 10 then
  22. -- 若id为【1】开头时,当且仅当id长度为10位,且除去【1】后的部分均不包含小写l大写I、大写O和数字0时合法。
  23. if not mw.ustring.match(id, '^1[a-km-zA-HJ-NP-Z0-9]+$') then
  24. result = false
  25. end
  26. elseif string.len(id) == 9 then
  27. -- 若id不满足上述四种情况时,当且仅当id长度为9位,且不包含小写l大写I、大写O和数字0时合法。
  28. if not mw.ustring.match(id, '^[a-km-zA-HJ-NP-Z0-9]+$') then
  29. result = false
  30. end
  31. else
  32. result = false
  33. end
  34. else
  35. result = false
  36. end
  37. if result then
  38. return ''
  39. else
  40. return frame:expandTemplate {title = 'ArticleCategory', args = {'Bilibili视频ID错误'}} ..
  41. '<span class="BilibiliVideoIDValidatorArgument" style="display: none;">' ..
  42. frame.args.id .. '</span>'
  43. end
  44. end
  45. }
返回顶部
页面反馈