【问题标题】:Creating password parameters for Ruby为 Ruby 创建密码参数
【发布时间】:2019-08-22 19:06:45
【问题描述】:

尝试在 Ruby 中创建一个 sing up 过程。我在代码中遇到了七个字符的长度,但密码还必须包含以下内容:

  • 大写字符
  • 小写字符
  • 号码
  • 符号

无法将这些要求输入到代码中。任何帮助表示赞赏。

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

【问题讨论】:

  • 你试过什么?正则表达式可以检查这样的需求。

标签: arrays ruby object


【解决方案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 /\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$$$"
    

    请注意,在获得有效密码之前,该方法不会返回。什么是允许的符号当然必须定义。

    如果要显示一个值,通常最好从方法中返回该值,然后显示它。这样,可以使用相同的方法来获取要以其他方式使用的密码,而不仅仅是显示它。 也可以这样写。

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

    【讨论】:

    • 我和那些五颜六色的星星一点关系都没有。在我写答案的时候,它们掉到了我的屏幕上。你可以感谢stackoverflow。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-03
    • 1970-01-01
    • 2016-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-26
    相关资源
    最近更新 更多