具有特殊字符的Javascript正则表达式密码验证

标签 javascript regex passwords

我正在尝试使用正则表达式验证密码。如果我们将所有字符都作为字母,则密码会更新。我哪里错了?正则表达式对吗?

function validatePassword() {
    var newPassword = document.getElementById('changePasswordForm').newPassword.value;
    var minNumberofChars = 6;
    var maxNumberofChars = 16;
    var regularExpression  = /^[a-zA-Z0-9!@#$%^&*]{6,16}$/;
    alert(newPassword); 
    if(newPassword.length < minNumberofChars || newPassword.length > maxNumberofChars){
        return false;
    }
    if(!regularExpression.test(newPassword)) {
        alert("password should contain atleast one number and one special character");
        return false;
    }
}

最佳答案

使用正 lookahead断言:

var regularExpression = /^(?=.*[0-9])(?=.*[!@#$%^&*])[a-zA-Z0-9!@#$%^&*]{6,16}$/;

没有它,您当前的正则表达式只匹配您有 6 到 16 个有效字符,它不会验证它有至少一个数字,并且至少一个特殊字符。这就是上面的 lookahead 的目的。

  • (?=.*[0-9]) - 断言一个字符串至少有一个数字;
  • (?=.*[!@#$%^&*]) - 断言一个字符串至少有一个特殊字符。

关于具有特殊字符的Javascript正则表达式密码验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12090077/

相关文章:

ruby-on-rails - 自定义密码恢复装置

keyboard - LibGDX:移动文本字段,以便在使用屏幕键盘输入时可见

javascript - 使textarea全屏jquery(用作代码编辑器)

javascript - 在登录 asp.net MVC 应用程序期间检测 javascript...这段代码看起来正常吗?

javascript - Eslint: no-duplicates 解决错误:无法加载解析器 "node"

javascript - 一次向 MySQL 表中插入多行

r - 如何精确地 grep 一个单词

Java 正则表达式 - 字符 "("和 ")"与模式 "[\\p{Alpha} ' -,.] 匹配

r - R 正则表达式中的双冒号

c# - 存储全局/共享应用程序登录名/密码的常用方法有哪些?