新兴技术CRM和数据平台电子邮件营销和电子邮件营销自动化

使用 JavaScript 和正则表达式检查密码强度(还有服务器端示例!)

我正在做一些研究,以查找使用 JavaScript的常用表达 (正则表达式)。 在我工作的应用程序中,我们进行了回发操作以验证密码强度,这对我们的用户而言非常不便。

什么是正则表达式?

正则表达式是定义搜索模式的一系列字符。 通常,字符串搜索算法会将此类模式用于 发现 or 查找和替换 对字符串的操作,或用于输入验证。 

本文绝对不是要教您正则表达式。 只需知道使用正则表达式的功能将绝对简化您在搜索文本模式时的开发。 还需要注意的是,大多数开发语言都优化了正则表达式的使用方式…因此,Regex通常比服务器端和客户端都快得多,而不是分步解析和搜索字符串。

我在网上搜寻了很多之后才发现 例如 一些很好的正则表达式,它们查找长度,字符和符号的组合。 但是,对于我来说,该代码有点过分了,并且是针对.NET量身定制的。 因此,我简化了代码并将其放入JavaScript。 这使得它可以在回发之前在客户端的浏览器上实时验证密码强度……并向用户提供有关密码强度的一些反馈。

输入一个密码

每次敲击键盘时,都会针对正则表达式对密码进行测试,然后在其下方的跨度中向用户提供反馈。

这是代码

最低价的 常用表达 在最小化代码长度方面做得非常出色。 这个 Javascript 函数检查密码的强度,以及破解它的难度是容易、中等、困难还是极难猜到。 当这个人打字时,它会显示鼓励它变得更强壮的提示。 它根据以下内容验证密码:

  • 长度 – 如果长度少于或多于 8 个字符。
  • 混合情况 – 如果密码同时包含大写和小写字符。
  • 数值 – 如果密码包含数字。
  • 特殊字符 – 如果密码包含特殊字符。

该功能显示难度以及进一步加固密码的一些提示。

function checkPasswordStrength(password) {
  // Initialize variables
  var strength = 0;
  var tips = "";

  // Check password length
  if (password.length < 8) {
    tips += "Make the password longer. ";
  } else {
    strength += 1;
  }

  // Check for mixed case
  if (password.match(/[a-z]/) && password.match(/[A-Z]/)) {
    strength += 1;
  } else {
    tips += "Use both lowercase and uppercase letters. ";
  }

  // Check for numbers
  if (password.match(/\d/)) {
    strength += 1;
  } else {
    tips += "Include at least one number. ";
  }

  // Check for special characters
  if (password.match(/[^a-zA-Z\d]/)) {
    strength += 1;
  } else {
    tips += "Include at least one special character. ";
  }

  // Return results
  if (strength < 2) {
    return "Easy to guess. " + tips;
  } else if (strength === 2) {
    return "Medium difficulty. " + tips;
  } else if (strength === 3) {
    return "Difficult. " + tips;
  } else {
    return "Extremely difficult. " + tips;
  }
}

强化密码请求

重要的是,您不仅要验证Javascript中的密码构造。 这将使拥有浏览器开发工具的任何人都可以绕过脚本并使用所需的任何密码。 在将密码存储在平台中之前,您应该始终利用服务器端检查来验证密码强度。

用于密码强度的 PHP 函数

function checkPasswordStrength($password) {
  // Initialize variables
  $strength = 0;

  // Check password length
  if (strlen($password) < 8) {
    return "Easy to guess";
  } else {
    $strength += 1;
  }

  // Check for mixed case
  if (preg_match("/[a-z]/", $password) && preg_match("/[A-Z]/", $password)) {
    $strength += 1;
  }

  // Check for numbers
  if (preg_match("/\d/", $password)) {
    $strength += 1;
  }

  // Check for special characters
  if (preg_match("/[^a-zA-Z\d]/", $password)) {
    $strength += 1;
  }

  // Return strength level
  if ($strength < 2) {
    return "Easy to guess";
  } else if ($strength === 2) {
    return "Medium difficulty";
  } else if ($strength === 3) {
    return "Difficult";
  } else {
    return "Extremely difficult";
  }
}

用于密码强度的 Python 函数

def check_password_strength(password):
  # Initialize variables
  strength = 0

  # Check password length
  if len(password) < 8:
    return "Easy to guess"
  else:
    strength += 1

  # Check for mixed case
  if any(char.islower() for char in password) and any(char.isupper() for char in password):
    strength += 1

  # Check for numbers
  if any(char.isdigit() for char in password):
    strength += 1

  # Check for special characters
  if any(not char.isalnum() for char in password):
    strength += 1

  # Return strength level
  if strength < 2:
    return "Easy to guess"
  elif strength == 2:
    return "Medium difficulty"
  elif strength == 3:
    return "Difficult"
  else:
    return "Extremely difficult"

密码强度的 C# 函数

public string CheckPasswordStrength(string password) {
  // Initialize variables
  int strength = 0;

  // Check password length
  if (password.Length < 8) {
    return "Easy to guess";
  } else {
    strength += 1;
  }

  // Check for mixed case
  if (password.Any(char.IsLower) && password.Any(char.IsUpper)) {
    strength += 1;
  }

  // Check for numbers
  if (password.Any(char.IsDigit)) {
    strength += 1;
  }

  // Check for special characters
  if (password.Any(ch => !char.IsLetterOrDigit(ch))) {
    strength += 1;
  }

  // Return strength level
  if (strength < 2) {
    return "Easy to guess";
  } else if (strength == 2) {
    return "Medium difficulty";
  } else if (strength == 3) {
    return "Difficult";
  } else {
    return "Extremely difficult";
  }
}

用于密码强度的 Java 函数

public String checkPasswordStrength(String password) {
  // Initialize variables
  int strength = 0;

  // Check password length
  if (password.length() < 8) {
    return "Easy to guess";
  } else {
    strength += 1;
  }

  // Check for mixed case
  if (password.matches(".*[a-z].*") && password.matches(".*[A-Z].*")) {
    strength += 1;
  }

  // Check for numbers
  if (password.matches(".*\\d.*")) {
    strength += 1;
  }

  // Check for special characters
  if (password.matches(".*[^a-zA-Z\\d].*")) {
    strength += 1;
  }

  // Return strength level
  if (strength < 2) {
    return "Easy to guess";
  } else if (strength == 2) {
    return "Medium difficulty";
  } else if (strength == 3) {
    return "Difficult";
  } else {
    return "Extremely difficult";
  }
}

Douglas Karr

Douglas Karr 是...的创始人 Martech Zone 以及公认的数字化转型专家。 Douglas 帮助创办了几家成功的 MarTech 初创公司,协助对超过 5 亿美元的 MarTech 收购和投资进行尽职调查,并继续推出他自己的平台和服务。 他是 Highbridge,一家数字化转型咨询公司。 道格拉斯还是一本傻瓜指南和商业领导力书籍的出版作者。

相关文章

33条评论

  1. 谢谢你! 谢谢你! 谢谢你! 我已经用来自其他网站的该死的密码强度代码鬼混了 2 周,并把我的头发拉了出来。 你的很短,就像我想要的那样工作,最重要的是,对于 JavaScript 新手来说很容易修改! 我想捕获强度判断,而不是让表单发布来实际更新用户的密码,除非它符合强度测试。 其他人的代码太复杂或无法正常工作或其他原因。 我爱你! XXXXXX

  2. “P@s$w0rD” 显示为强,尽管它会很快被字典攻击破解......
    要在专业解决方案上部署这样的功能,我认为将此算法与字典检查相结合很重要。

  3. 这种类型的“强度检查器”会导致人们走上一条非常危险的道路。 它重视字符多样性而不是密码长度,导致它认为更短、更多样化的密码比更长、更不多样化的密码更强。 这是一个谬误,如果您的用户面临严重的黑客威胁,他们就会陷入困境。

  4. 你是一个活生生的救星! 我正在左右和中心解析字符串,并认为有更好的方法并使用正则表达式找到了您的代码。 能够为我的网站敲响它……你不知道这有多大帮助。 非常感谢道格拉斯!!

你觉得呢?

本网站使用Akismet来减少垃圾邮件。 了解您的数据如何处理.