【问题标题】:Implementing minimum password complexity requirements in rails 5在 Rails 5 中实现最低密码复杂性要求
【发布时间】:2018-03-12 10:44:08
【问题描述】:

我已经建立了一个用户模型,并按照 Michael Hartl 的tutorial 进行注册。我已经调整了this 正则表达式,以降低密码复杂度以检查

  • 至少一个小写字母
  • 至少一个大写字母
  • 至少一个数字
  • 至少一个符号

^(?=.*[A-Z])(?=.*[!@#$&*])(?=.*[0-9])(?=.*[a-z]).{8,}$

正则表达式完全按照rubular 中的预期工作,但是,我无法在我的应用程序中成功实现它

到目前为止我所做的尝试

我尝试了各种组合

  VALID_PASSWORD_REGEX = ^(?=.*[A-Z])(?=.*[!@#$&*])(?=.*[0-9])(?=.*[a-z]).{8,}$

  validates :password, format: { with: VALID_PASSWORD_REGEX }

有无:

  • 双引号围绕正则表达式,例如"^(?=.* ... {8,}$"
  • /VALID_PASSWORD_REGEX/ 周围的正斜杠
  • 正则表达式的 [!@#$&*] 部分中的 #('#' 似乎被识别为崇高文本中的注释)

我不断收到错误消息,例如“必须以 :with 形式提供正则表达式或 proc 或 lambda”和“语法错误,意外的 '^'”

什么有效

在阅读了 assefamaru 的回答后,我可以看到需要将 ^ 和 $ 替换为 \A 和 \z(请参阅 here

以下是有效的:

  VALID_PASSWORD_REGEX = /\A(?=.*[A-Z])(?=.*[!@$&*])(?=.*[0-9])(?=.*[a-z]).{8,}$\z/
  validates :password, format: { with: VALID_PASSWORD_REGEX }

【问题讨论】:

    标签: ruby ruby-on-rails-5


    【解决方案1】:

    正如 ruby​​ 的 docs 中所述,正则表达式是使用 /.../%r{...} 文字以及 Regexp::new 构造函数创建的。例如,您可以:

    VALID_PASSWD = /^(?=.*[A-Z])(?=.*[!@#$&*])(?=.*[0-9])(?=.*[a-z]).{8,}$/
    

    VALID_PASSWD = %r(^(?=.*[A-Z])(?=.*[!@#$&*])(?=.*[0-9])(?=.*[a-z]).{8,}$)
    

    VALID_PASSWD = Regexp.new("^(?=.*[A-Z])(?=.*[!@#$&*])(?=.*[0-9])(?=.*[a-z]).{8,}$")
    

    然后,您可以进行验证:

    validates :password, format: { with: VALID_PASSWD }
    

    附言。在您的rubular 链接中,您可能已经注意到包含正则表达式的文本框左右两侧的正斜杠。这对应于用于创建正则表达式的 /.../ 文字。

    【讨论】:

      猜你喜欢
      • 2016-04-18
      • 1970-01-01
      • 1970-01-01
      • 2019-04-18
      • 1970-01-01
      • 2021-08-07
      • 2013-11-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多