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

Ruby 在rails 5中实现最低密码复杂性要求,ruby,ruby-on-rails-5,Ruby,Ruby On Rails 5,我已经建立了一个用户模型,并按照Michael Hartl的思路注册。我已经调整了regex,以使密码复杂性降至最低 至少一个小写字母 至少有一个大写字母 至少一个数字 至少一个符号 i、 e regex的工作原理完全符合中的预期,但是,我还未能在我的应用程序中成功实现它 我到目前为止所做的尝试 我试过各种不同的组合 VALID_PASSWORD_REGEX = ^(?=.*[A-Z])(?=.*[!@#$&*])(?=.*[0-9])(?=.*[a-z]).{8,}$ v

我已经建立了一个用户模型,并按照Michael Hartl的思路注册。我已经调整了regex,以使密码复杂性降至最低

  • 至少一个小写字母
  • 至少有一个大写字母
  • 至少一个数字
  • 至少一个符号
i、 e

regex的工作原理完全符合中的预期,但是,我还未能在我的应用程序中成功实现它

我到目前为止所做的尝试

我试过各种不同的组合

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

  validates :password, format: { with: VALID_PASSWORD_REGEX }
有无:

  • 围绕正则表达式的双引号,例如“^(?=.*.{8,}$”
  • 正斜杠围绕/VALID\u PASSWORD\u REGEX/
  • 正则表达式的[!@$&*]部分中的#(“#”似乎被认为是崇高文本中的注释)
我不断地在“正则表达式或proc或lambda必须作为:with”和“syntax error,unexpected'^'提供”这两行中遇到错误

什么有效

在阅读了assefamaru的答案后,我能够看到需要用\A和\z替换的^and$(请参阅)

以下是有效的方法:

  VALID_PASSWORD_REGEX = /\A(?=.*[A-Z])(?=.*[!@$&*])(?=.*[0-9])(?=.*[a-z]).{8,}$\z/
  validates :password, format: { with: VALID_PASSWORD_REGEX }
如ruby中所述,Regexp是使用
/…/
%r{…}
文本以及
Regexp::new
构造函数创建的。例如,您可以:

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

然后,您可以进行验证:

validates :password, format: { with: VALID_PASSWD }

另外,在您的链接中,您可能已经注意到包含正则表达式的文本框的左侧和右侧存在正斜杠。这对应于用于创建正则表达式的
/…/
文本。

如ruby中所述,正则表达式是使用
/…/
%r{…}创建的
literals,并通过
Regexp::new
构造函数。例如,您可以:

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

然后,您可以进行验证:

validates :password, format: { with: VALID_PASSWD }

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

validates :password, format: { with: VALID_PASSWD }