【问题标题】:Regular Expression for Password strength with one special characters except Underscore密码强度的正则表达式,除下划线外具有一个特殊字符
【发布时间】:2015-06-03 19:53:31
【问题描述】:

我有以下正则表达式:

^.*(?=^.{8,}$)(?=.*\d)(?=.*[!@#$%^&*-])(?=.*[A-Z] )(?=.*[a-z]).*$

我正在使用它来验证
至少一个字母
至少一个大写字母
至少一个数字
至少一个特殊字符
至少 8 个字符

但除此之外,我还需要限制下划线 (_)。 如果我输入密码Pa$sw0rd,这是正确的验证,这是真的。 如果我输入Pa$_sw0rd 这也是正确验证,这是错误的。

问题是当所有规则都满足时,正则表达式正在通过。我想要一个规则来限制下划线以及上面的内容。

任何帮助都会非常感激。

【问题讨论】:

  • 应该没有_ ??????
  • 为每个需求使用一个正则表达式将使整个事情更容易编码、理解、更新和维护。

标签: regex model-view-controller


【解决方案1】:

我想你可以使用一个否定字符类[^_]*来添加这个限制(另外,去掉开头的.*,它是多余的,第一个look-ahead已经在模式的开头,不需要复制^,这是完全多余的,因为总长度限制可以在最后检查):

^(?=.*\d)(?=.*[!@#$%^&*-])(?=.*[A-Z])(?=.*[a-z])[^_]{8,}$

demo

【讨论】:

  • 不客气。如果对您有用,请接受答案(在向下箭头下方左侧打勾)。
【解决方案2】:
^(?=.*?\d)(?=.*?[!@#$%^&*-])(?=.*?[A-Z])(?=.*?[a-z])(?!.*_).{8,}$

你可以试试这个。.*一开始没用。看演示。

https://regex101.com/r/pG1kU1/34

【讨论】:

  • 您正在使用.* 添加另一个前瞻,这会降低性能。
  • @stribizhev yups 但我觉得添加了一个答案,它显示了另一种方式或一种新方法来处理同样的事情,尽管如果可以的话,性能不一样 :) 增加了知识小猫:)
猜你喜欢
  • 1970-01-01
  • 2019-04-17
  • 2023-03-29
  • 1970-01-01
  • 2014-09-27
  • 1970-01-01
  • 2012-08-18
  • 2020-07-18
  • 1970-01-01
相关资源
最近更新 更多