2

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

感谢任何帮助!

4

1 回答 1

4

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

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

注2:如评论中所述,-.这种特殊情况下不需要转义。但是,由于-is 方括号内的范围运算符[_-.]与不同,因为它不会[-._]匹配任何内容,因为 和 之间的符号范围_.空。逃逸甚至在方括号内也是安全-.

于 2013-05-29T20:07:16.640 回答