2013-05-29 5 views
2

я использую следующий код в PHP, чтобы проверить, если пароль содержит недопустимые символыLua - Обнаружить, если строка содержит допустимые символы для пароля

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

Вы даже не можете проверить пароль: Хешируйте и храните хэш. – daurnimator

+0

@daurnimator - я использую эту функцию для проверки пароля до того, как я сделаю хэш и сохраню его. Возможно, это не обязательно, но я проверяю пароль, когда кто-то вводит пароль на моем сайте (зарегистрируйтесь или зайдите в систему). Если пароль недействителен, я вообще не подключаюсь к db. –

+0

, вы не должны ограничивать набор символов или длину. Лучшая практика для выбора пароля - автоматическая генерация. Поскольку вы храните только хэш, длина не имеет значения. – daurnimator

ответ

4

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

Примечание 1: как указано в комментарии, ~= nil часть может быть удалена, как положение, возвращаемого find будет оцениваться, как true (если это не ноль) в логических операторов. Однако, так как это номер, он будет сбой при использовании в validate_password(str) == true сравнениях (поскольку 1 == true не является true). Альтернативой является использование not str:find('[^...]'), как было предложено Егором.

Примечание 2: как указано в комментариях, - и . не обязательно должны быть экранированы в данном конкретном случае. Однако, поскольку - является оператором диапазона в квадратных скобках, [_-.] - не то же, что и [-._], поскольку он не будет соответствовать нишу, поскольку диапазон символов между и . пуст. Безопасно избегать - и . даже внутри квадратных скобок.

+0

+1 для скорости ответа и краткости. –

+1

Подчеркивание не является частью шаблона '% w'. 'и не str: find '[^ -._% w]'' –

+2

@EgorSkriptunoff, правильно; обновляется; Благодарю. 'not str: find '[^ ...]'' как двойной отрицательный;). –

Смежные вопросы