Lua - 检测字符串是否包含密码有效字符

我在 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
                -- 这不对。需要检查字母数字或 - 或 .
            return false
        else
            return true
        end
    end
end

感谢任何帮助!

点赞
用户1442917
用户1442917
return #str >= 5 and #str <= 30 and str:find('^[%-%.%w_]+$') ~= nil

注意1:如评论中所述,~= nil 部分可以省略,因为find返回的位置在逻辑运算符中将被评估为 true(当它不是nil时)。但是,由于它是一个数字,在使用validate_password(str) == true比较时将失败(因为1 == true不是true)。一种替代方法是使用 Egor 建议的 not str:find('[^...]')

注意2:如评论中所述,此特定情况下无需转义 -.。但是,因为-是在方括号内的范围运算符,因此[_-.][-._]不同,因为它将匹配空值,因为_.之间的符号范围为空。即使在方括号内部,转义-.也是安全的。

2013-05-29 20:07:16