OpenWRT Luci-Lua密码验证函数代码审核求助
密码验证函数审核与优化建议
首先梳理下你这段代码里的问题,再给你调整出符合需求的版本:
- 逻辑判断颠倒:第一个条件
#value <= 6 and not value:find('^[%-%.%w]+$')的逻辑完全反了,而且还额外允许了连字符和点号,不符合你“仅接受字母数字”的要求。 - 匹配范围错误:第二个正则
^(.)\1*$是检查整个密码是否全为同一字符,但你需要的是前8个字符不能完全相同,不管后续字符是什么。 - 错误反馈缺失:LuCI的验证函数验证不通过时,应该返回明确的错误提示字符串,而不是nil,这样用户能清楚知道哪里不符合要求。
下面是适配你需求的优化代码:
function pw1.validate(self, value) -- 验证是否仅包含字母数字 if not value:match('^[a-zA-Z0-9]+$') then return nil, "密码只能包含字母和数字" end -- 设定最小长度(至少8位才能检查前8个字符) local min_length = 8 if #value < min_length then return nil, string.format("密码长度不能少于%d位", min_length) end -- 检查前8个字符是否完全相同 if value:sub(1, 8):match('^(.)%1+$') then return nil, "密码前8个字符不能完全相同" end -- 验证通过,返回密码值 return value end
给你拆解下这段代码的核心逻辑:
- 用
^[a-zA-Z0-9]+$严格限制密码只能由字母和数字组成,完全符合你的输入要求。 - 增加了最小长度检查(默认8位,你可以按需修改
min_length的值),毕竟要检查前8个字符,密码长度至少得达标才有意义。 - 通过
value:sub(1,8)截取前8位字符,再用^(.)%1+$判断这8位是否全为同一字符,精准匹配你的需求。 - 每个验证失败分支都返回了友好的错误提示,用户在LuCI界面操作时能直观看到问题所在。
内容的提问来源于stack exchange,提问作者Muhammed Aslam
相关产品推荐
相关产品推荐

