我建立了一个用户模型并按照迈克尔哈特尔的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 }
有没有:
我不断遇到错误“正则表达式或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 }
答案 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的/.../
字面值。