Создание параметров пароля для Ruby

#arrays #ruby #object

#массивы #ruby #объект

Вопрос:

Попытка создать процедуру sing up в 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
  

Комментарии:

1. Что вы пробовали? регулярные выражения могут проверять наличие подобных требований.

Ответ №1:

  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
  

Ответ №2:

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

 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 /AD z/       then "one digit"
    when /A[^$%amp;!] 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$$$"
  

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

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

 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
    (?=.*[$%amp;!])  # 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)(?=.*[$%amp;!])/
  

Комментарии:

1. Я не имел никакого отношения к этим разноцветным звездам. Они упали на мой экран, когда я писал свой ответ. Вы можете поблагодарить stackoverflow за это.