在rails 5中实现最低密码复杂性要求

时间:2018-03-12 01:19:17

标签: ruby ruby-on-rails-5

我建立了一个用户模型并按照迈克尔哈特尔的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 /
  • 正则表达式[!@#$& *]部分中的#('#'似乎被认为是崇高文本中的注释)

我不断遇到错误“正则表达式或proc或lambda必须提供为:with”和“语法错误,意外'^'”

什么有用

在阅读了assefamaru的回答之后,我能够看到^和$需要替换为\ A和\ z(参见here

这是有效的:

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

1 个答案:

答案 0 :(得分:2)

正如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链接中,您可能已经注意到包含正则表达式的文本框左侧和右侧的正斜杠。这对应于用于创建regexp的/.../字面值。