使用Regex验证密码

den*_*icz 16 regex validation ruby-on-rails-3

我正在开发一个需要根据以下条件验证密码的Rails 3应用程序: must be at least 6 characters and include one number and one letter.

这是我的正则表达式:

validates :password, :format => {:with => /^[([a-z]|[A-Z])0-9_-]{6,40}$/, message: "must be at least 6 characters and include one number and one letter."}
Run Code Online (Sandbox Code Playgroud)

现在,如果我输入密码(例如:dogfood)它将通过.但我需要做的是通过上述标准.

我在正则表达式方面并不是那么出色,所以非常感谢任何帮助!

And*_*ong 30

使用前瞻断言:

/^(?=.*[a-zA-Z])(?=.*[0-9]).{6,}$/
  |             |          |
  |             |          |
  |             |          Ensure there are at least 6 characters.
  |             |
  |             Look ahead for an arbitrary string followed by a number.
  |                        
  Look ahead for an arbitrary string followed by a letter.
Run Code Online (Sandbox Code Playgroud)

从技术上讲,在这种情况下你不需要锚,但使用它们是个好习惯.

  • Yup Lookahead断言最适合密码正则表达式.为此+1.检查这个RegEx:`^.*(?=.{10,})(?=.*\d)(?=.*[az])(?=.*[AZ])(?=.*[ @#$%^&+ =]).*$`.这一个检查最少数量的字符,至少1位数,至少1个小写字母,至少1个大写字母,至少1个给定的特殊字符.它非常易于配置,更容易改变你想要的东西(相对而言).这提供了一个很好的见解:[Regular-Expressions.info](http://www.regular-expressions.info/lookaround.html) (8认同)
  • 使用\ A和\ z作为锚点.当前版本的Rails不接受^和$作为没有`multiline:true`的锚点.显然这是一个安全风险:[link](http://stackoverflow.com/a/17760113) (4认同)
  • Lookaheads期待一个模式,这里它将从开始看任何(.)0次或更多次,然后是[a-zA-Z],与[0-9]相同.Lookaheads没有前进,所以你仍然会在0位置.{0,6}这将验证6+的长度 (3认同)