php - 用于匹配最低密码要求和其他字符的正则表达式

标签 php regex

我希望在我的网站上注册的用户选择的密码包括:

  • 至少 8 个字符
  • 至少一个大写字母
  • 至少一个小写字母
  • 至少一位数字。 但这些是最低要求。它们可以包含任何字符,例如 @、#、& 等,只要满足这些要求即可。我有以下正则表达式:

    /^(?=.*?[a-z])(?=.*?[A-Z])(?=.*?\d)\w{8,20}$/

但它不匹配除上面列出的要求之外的其他字符。我希望能够匹配可以包含任何字符但仍满足上述条件的密码。我该怎么做?

最佳答案

这将做你想要的:

/^(?=.*[A-Z])(?=.*[a-z])(?=.*\d).{8,}$/

Demo on regex101

Debuggex Demo

说明:

Regular expression visualization

  • ^ 匹配字符串的开头
  • (?=.*[A-Z]) 需要大写字符
  • (?=.*[a-z]) 需要小写字符
  • (?=.*\d) 需要一个数字
  • .{8,} 要求最小长度为 8。

注意:与 anubhava 的答案不同,这允许使用空白字符。如果您不需要空格,请按照 anubhava 的建议使用 \S

编辑:根据 @ridgerunner 在评论中的精彩观点,这里是一个稍微更有效的正则表达式:

/^(?=[^A-Z]*[A-Z])(?=[^a-z]*[a-z])(?=\D*\d).{8,}$/

此版本避免了惰性 .* 表达式,该表达式会浪费时间在此上下文中测试整个正则表达式。

关于php - 用于匹配最低密码要求和其他字符的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24164973/

相关文章:

php - 在给定手机号码的同一位置至少匹配 5 个号码位置

php - JQuery 发布和获取

c# - 查找以下划线开头的单词

ios - NSPredicate 正则表达式错误

java - 使用多个正则表达式检查字符串中是否存在列入黑名单的模式

regex - Intellij 正则表达式查找并替换为左括号

PHP MySQL - 我做错了什么吗?

php - 根据相同的值将数组元素包裹在 div 中

php - TinyMCE 没有正确地将数据存储在数据库中

比较日期和显示当前日期的PHP代码