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

时间:2013-05-29 20:00:58

标签: string lua pattern-matching preg-match corona

我在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

感谢任何帮助!

1 个答案:

答案 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}}和.为空。即使在方括号内,也可以安全地逃离-.