Создать пароль валидатор - PullRequest
0 голосов
/ 04 марта 2020

Я новичок в ruby, поэтому я хочу бросить вызов себе, чтобы создать Валидатор паролей, чтобы пароль был действительным или нет, он должен соответствовать следующим условиям

  • Минимум 7 символов

  • Минимум 2 из следующих специальных символов ('!', '@', '#', '$', '%', '& ',' * ')

  • Как минимум 2 числа

Итак, я написал это:

numberOfSymbol=0
numberOfNumbers=0
totalNumber=0
numberArray=(0..9).to_a
inputPassword=gets.chomp
symbol=['!', '@', '#', '$', '%', '&', '*']
neededHash={}
neededHash.default=0
randomGeneratedVar=[]
pppppp=0
symbol.each do |sym|
    if inputPassword.include?(sym)
        numberOfSymbol+=1
    end
end
numberArray.each do |x|
    inputPassword.each_char do |y|
        if x.to_s == y
            neededHash[y] += 1
            randomGeneratedVar = neededHash.values
        end
    end
end
randomGeneratedVar.each {|z| pppppp+=z}
if numberOfSymbol >= 2 && inputPassword.length >= 7 && pppppp >=2
      puts "Strong"
else
      puts "Weak"
end

После Я проверил это через тестер, он удовлетворил 16 случаев из 18, интересно, вы, ребята, можете помочь мне усовершенствовать этот код.

Ответы [ 2 ]

0 голосов
/ 04 марта 2020

Способ ruby, а также простой способ

def password_complexity
    if password.present? && password =~ /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d{2})(?=.*[@$!%*?&]{2})[A-Za-z\d@$!%*?&]{7,}$)/
     puts "Strong Password"
    else
     put "Complexity requirement not met. Please use: 1 uppercase, 1 lowercase, 2 digit and 2 special character, 7 characters"
    end 
 end

Если вы хотите изменить регулярное выражение, найдите несколько примеров. Минимум восемь символов, минимум одна буква и одно число:

"^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d]{8,}$"

Минимум восемь символов, как минимум одна буква, одно число и один специальный символ:

"^(?=.*[A-Za-z])(?=.*\d)(?=.*[@$!%*#?&])[A-Za-z\d@$!%*#?&]{8,}$"

Минимум восемь символов, как минимум одна заглавная буква, одна строчная буква и одно число:

"^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z\d]{8,}$"

Минимум восемь символов, как минимум одна заглавная буква, одна строчная буква, одно число и один специальный символ:

"^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$"

Минимум восемь и максимум 10 символов, минимум одна заглавная буква , одна строчная буква, одно число и один специальный символ:

"^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,10}$"

Способ Rails

PASSWORD_FORMAT = /\A
      (?=.{7,})          # Must contain 8 or more characters
      (?=.*\d)           # Must contain a digit
      (?=.*[a-z])        # Must contain a lower case character
      (?=.*[A-Z])        # Must contain an upper case character
      (?=.*[[:^alnum:]]) # Must contain a symbol
    /x

validates :password, 
  presence: true, 
  length: { in: 15 }, 
  format: { with: PASSWORD_FORMAT }, 
  confirmation: true

Я привел только один пример, который вы можете изменить в соответствии с вашими требованиями. Пожалуйста, прочитайте это для дополнительная информация

https://medium.com/@Timothy_Fell / как установить пароль в rails-d9081926923b

0 голосов
/ 04 марта 2020

Вам не нужно такое количество переменных для создания валидатора.

Я думаю, это выглядит более простым и понятным:

def password_validator(password)
  symbols = %w(! @ # $ % & *)
  counter = 0
  symbols.each do |element|
    if password.include?(element)
      counter += 1
    end
  end
  if password.length >= 7 && password.tr("^0-9 ", "").length >= 2 && counter >= 2
    "password is valid"
  else
    "password not valid"
  end
end
  1. Символы - это массив символов
  2. Ходить по каждому символу и включать инициализацию?
  3. Просто условие, если длина пароля> = 7 И длина номера пароля> = 2 И счетчик символов>> 2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...