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によって返される位置は論理演算子で(nilでない場合)findとして評価されるため、一部を削除できます。trueただし、これは数値であるため、validate_password(str) == true比較で使用すると失敗します ( 1 == trueis not であるためtrue)。not str:find('[^...]')別の方法は、Egor の提案に従って使用することです。

注2:コメントで述べたように、この特定のケースではエスケープする必要はありません-.ただし、-は角括弧内の範囲演算子であるため、との間の記号の範囲が空であるため、何も一致しないため、 と同じで[_-.]はありません。エスケープしても安全で、角括弧内でも安全です。[-._]_.-.

于 2013-05-29T20:07:16.640 に答える