我在PHP中使用以下代码来验证密码是否包含无效字符
function validate_password($str) {
if(strlen($str) < 5 || strlen($str) > 30) {
return false;
} else {
return preg_match('/^[-._A-Za-z0-9]*$/',$str);
}
}
我试图在Lua中做同样的事情,但不确定检查字符串是否只包含某些字符的最佳方法。我的有效字符是字母数字,加上“ - ”和“。”
local function validate_password(str)
if string.len(str) < 5 or string.len(str) > 30 then
return false
else
if(str:match("%W")) then
-- this isn't right. need to check if alpha numeric or - or .
return false
else
return true
end
end
end
感谢任何帮助!
答案 0 :(得分:4)
return #str >= 5 and #str <= 30 and str:find('^[%-%.%w_]+$') ~= nil
注1:如评论中所述,~= nil
部分可以删除,因为find
返回的位置将在逻辑运算符中被评估为true
(当它不为零时)。但是,由于它是一个数字,因此在validate_password(str) == true
比较中使用时会失败(因为1 == true
不是true
)。另一种方法是使用Egor建议的not str:find('[^...]')
。
注意2:正如评论中所述,-
和.
不需要在此特定情况下进行转义。但是,由于-
是方括号[_-.]
内的范围运算符, 与[-._]
相同,因为它与_
之间的符号范围无关{1}}和.
为空。即使在方括号内,也可以安全地逃离-
和.
。