Создание параметров пароля для Ruby - PullRequest
0 голосов
/ 01 апреля 2019

Попытка создать процедуру подписки в Ruby.В коде встречается длина из семи символов, но пароль также должен содержать следующее:

  • Прописные буквы
  • Прописные буквы
  • Число
  • Символ

Не удается ввести эти требования в код.Любая помощь приветствуется.

puts "Please enter your password"
my_password = gets
if my_password.length < 7
    puts "Your password is not long enough"
elsif my_password.length >= 7
    print my_password
end

Ответы [ 2 ]

4 голосов
/ 01 апреля 2019
  1. Вы должны chomp ввести от gets, в противном случае он будет содержать возврат каретки.

  2. для соответствия всем критериям, вы должны явно проверить все из них.

Как это:

puts "Please enter your password"
my_password = gets.chomp
case
when my_password.length < 7
  puts "Your password is not long enough"
when my_password !~ /[A-Z]/
  puts "Your password must contain an uppercase letter"
when my_password !~ /[a-z]/
  puts "Your password must contain a lowercase letter"
when my_password !~ /\d/
  puts "Your password must contain a digit"
when my_password !~ /[!?=_-]/
  puts "Your password must contain one of those: [!?=_-]"
else
  print my_password
end
0 голосов
/ 01 апреля 2019

Попробуйте это.

def get_password
  loop do
    puts "Please enter your password"
    my_password = gets.chomp
    str =
    case my_password
    when /\A.{,6}\z/     then "seven characters"
    when /\A[^A-Z]+\z/   then "one uppercase letter"
    when /\A[^a-z]+\z/   then "one lowercase letter"
    when /\A\D+\z/       then "one digit"
    when /\A[^$%&!]+\z/  then "one symbol"
    else break my_password
    end
    puts "Passwords must contain at least #{str}" 
  end
end

pw = get_password
  #=> "abcDEF123$$$"
puts pw
"abcDEF123$$$"

Обратите внимание, что метод не вернется, пока не будет получен действительный пароль. То, что составляет допустимый символ, конечно, должно быть определено.

Если значение должно отображаться, обычно лучше вернуть значение из метода, а затем отобразить его. Таким образом, тот же метод может использоваться для получения пароля, который должен использоваться другими способами, а не просто отображать его. enter image description here В качестве альтернативы можно написать следующее.

R = /
    \A
    (?=.{7})      # match seven chars in a positive lookahead
    (?=.*\p{Ll})  # match a lowercase letter in a positive lookahead
    (?=.*\p{Lu})  # match an uppercase letter in a positive lookahead
    (?=.*\d)      # match a digit in a positive lookahead
    (?=.*[$%&!])  # match a symbol in a positive lookahead
    /x            # free-spacing regex definition mode

def get_password
  loop do
    puts "Please enter your password"
    my_password = gets.chomp
    break my_password if my_password.match?(R)
    puts "Passwords must contain at least seven characters, one uppercase"
    puts "letter, one lowercase letter and one symbol"
  end
end

pw = get_password
  #=> "aA1$$$$$$$$$$$$$$$$$$$$"

Регулярное выражение обычно записывается следующим образом.

R = /\A\(?=.{7})(?=.*\p{Ll})(?=.*\p{Lu})(?=.*\d)(?=.*[$%&!])/
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...