【发布时间】: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