
新兴技术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";
}
}
我找到了另一个密码强度检查器。 他们的算法基于单词词典。 在 microsoft.com 上试一试—— http://www.microsoft.com/protect/yourself/password/checker.mspx 还有一个在 itsimpl.com – http://www.itsimpl.com
谢谢你! 谢谢你! 谢谢你! 我已经用来自其他网站的该死的密码强度代码鬼混了 2 周,并把我的头发拉了出来。 你的很短,就像我想要的那样工作,最重要的是,对于 JavaScript 新手来说很容易修改! 我想捕获强度判断,而不是让表单发布来实际更新用户的密码,除非它符合强度测试。 其他人的代码太复杂或无法正常工作或其他原因。 我爱你! XXXXXX
别客气! 别客气! 别客气!
我也爱你!
感谢您编写一段完全符合罐上代码要求的代码!
嗨,首先非常感谢您的努力,我尝试将它与 Asp.net 一起使用,但没有用,我正在使用
而不是标签,它没有用,有什么建议吗?!
致 Nisreen:突出显示框中的代码不适用于剪切粘贴。 单引号搞砸了。 演示链接的代码很好。
嘿,我喜欢你的剧本! 我将其翻译成荷兰语,并将其发布在这里的论坛上!
做得好! 究竟应该如何在客户端上完成
非常好的工作……
谢谢道格拉斯,我将它用于我目前的工作。
“P@s$w0rD” 显示为强,尽管它会很快被字典攻击破解......
要在专业解决方案上部署这样的功能,我认为将此算法与字典检查相结合很重要。
在 XULRunner 中效果很好,稍作改动。 谢谢!
感谢这个小代码,当我的访问者输入密码时,我现在可以用它来测试我的密码强度,
很棒的编码
脚本超级好。我在当前项目中使用过
谢谢你的分享!
如此简单而奇妙的表达。 我作为测试人员从此表达式得出了我的TC。
感谢你的分享。 您在此页面上有几个断开的链接。 仅供参考。
有人可以告诉我,为什么它对我不起作用..
我复制了所有代码,并将其粘贴到记事本++,但它根本不起作用?
请帮我..
太棒了!!!!! 谢谢。
干得好! 简单有效。 非常感谢你的分享!
谢谢
很好,谢谢。 但是...... STRONG pw 的例子是什么? '找不到!-{}
这种类型的“强度检查器”会导致人们走上一条非常危险的道路。 它重视字符多样性而不是密码长度,导致它认为更短、更多样化的密码比更长、更不多样化的密码更强。 这是一个谬误,如果您的用户面临严重的黑客威胁,他们就会陷入困境。
我不反对,乔丹! 该示例只是作为脚本的示例而发布的。 我对人们的建议是使用密码管理工具为任何独特的网站创建独立的密码短语。 谢谢!
谢谢,它很棒。
谢谢你的工作正常
我真的很感谢你被搜索了很多次,但最后我得到了你的帖子,真的很惊讶。 谢谢你
谢了哥们。 刚刚部署在我的网站上,并且运行良好。
喜欢听! 不客气!
我很感谢你的分享! 一直在寻求加强我们网站上的密码强度,而这个密码按我想要的方式工作。 非常感谢!
谢谢,希望您能够根据需要对其进行自定义。
你是一个活生生的救星! 我正在左右和中心解析字符串,并认为有更好的方法并使用正则表达式找到了您的代码。 能够为我的网站敲响它……你不知道这有多大帮助。 非常感谢道格拉斯!!
很高兴听到!