66

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

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;
    }
}
4

15 回答 15

92

使用积极的前瞻断言:

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

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

  • (?=.*[0-9])- 断言一个字符串至少有一个数字;
  • (?=.*[!@#$%^&*])- 断言一个字符串至少有一个特殊字符。
于 2012-08-23T11:11:01.640 回答
38
function validatePassword() {
    var p = document.getElementById('newPassword').value,
        errors = [];
    if (p.length < 8) {
        errors.push("Your password must be at least 8 characters"); 
    }
    if (p.search(/[a-z]/i) < 0) {
        errors.push("Your password must contain at least one letter.");
    }
    if (p.search(/[0-9]/) < 0) {
        errors.push("Your password must contain at least one digit."); 
    }
    if (errors.length > 0) {
        alert(errors.join("\n"));
        return false;
    }
    return true;
}

以下答案存在一定问题,因为在检查字符和数字时由于缺少 [ ] 而没有检查整个字符串,这是正确的版本

于 2013-05-23T07:07:47.070 回答
35

我将以下脚本用于最少 8 个字母的密码,至少包含一个符号、大小写字母和一个数字

function checkPassword(str)
{
    var re = /^(?=.*\d)(?=.*[!@#$%^&*])(?=.*[a-z])(?=.*[A-Z]).{8,}$/;
    return re.test(str);
}
于 2016-12-02T01:59:01.950 回答
25

你可以为javascript验证制作自己的正则表达式

    /^            : Start
    (?=.{8,})        : Length
    (?=.*[a-zA-Z])   : Letters
    (?=.*\d)         : Digits
    (?=.*[!#$%&? "]) : Special characters
    $/              : End



        (/^
        (?=.*\d)                //should contain at least one digit
        (?=.*[a-z])             //should contain at least one lower case
        (?=.*[A-Z])             //should contain at least one upper case
        [a-zA-Z0-9]{8,}         //should contain at least 8 from the mentioned characters

        $/)

Example:-   /^(?=.*\d)(?=.*[a-zA-Z])[a-zA-Z0-9]{7,}$/
于 2015-08-11T05:54:22.283 回答
18

不要尝试一步做太多。将每条规则分开。

function validatePassword() {
    var p = document.getElementById('newPassword').value,
        errors = [];
    if (p.length < 8) {
        errors.push("Your password must be at least 8 characters");
    }
    if (p.search(/[a-z]/i) < 0) {
        errors.push("Your password must contain at least one letter."); 
    }
    if (p.search(/[0-9]/) < 0) {
        errors.push("Your password must contain at least one digit.");
    }
    if (errors.length > 0) {
        alert(errors.join("\n"));
        return false;
    }
    return true;
}
于 2012-08-23T11:19:38.873 回答
12

密码的正则表达式

/^(?=.*\d)(?=.*[A-Z])(?=.*[a-z])(?=.*[a-zA-Z!#$%&? "])[a-zA-Z0-9!#$%&?]{8,20}$/

我花了一段时间才弄清楚这些限制,但我做到了!

限制:(注:我使用>><<来显示重要字符)

  1. 最少 8 个字符 {>>8,20}
  2. 最多 20 个字符 {8,>>20}
  3. 至少一个大写字符 (?=.*[A-Z])
  4. 至少一个小写字符 (?=.*[a-z])
  5. 至少一位数 (?=.*\d)
  6. 至少一个特殊字符 (?=.*[a-zA-Z >>!#$%&? "<<])[a-zA-Z0-9 >>!#$%&?<< ]
于 2019-03-20T16:07:39.630 回答
3

经过大量研究,我能够想出这个。这有更多特殊字符

validatePassword(password) {
        const re = /(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[!@#$%^&*()+=-\?;,./{}|\":<>\[\]\\\' ~_]).{8,}/
        return re.test(password);
    }
于 2021-02-15T08:52:52.020 回答
2

它对我来说是完美的,我相信对你们有用,检查它简单而准确

var regix = new RegExp("^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[!@#\$%\^&\*])(?=. 
            {8,})");

if(regix.test(password) == false ) {
     $('.messageBox').html(`<div class="messageStackError">
       password must be a minimum of 8 characters including number, Upper, Lower And 
       one special character
     </div>`);
}
else
{
        $('form').submit();
}
于 2021-02-24T14:33:17.017 回答
2

在这里,我正在扩展@João Silva 的答案。我需要检查不同的参数并相应地抛出不同的消息。

我将正则表达式分成不同的部分,现在该checkPasswordValidity(String)函数有条件地检查每个正则表达式部分并抛出不同的消息。

希望下面的例子能帮助你更好地理解!

/**
 * @param {string} value: passwordValue
 */
const checkPasswordValidity = (value) => {
  const isNonWhiteSpace = /^\S*$/;
  if (!isNonWhiteSpace.test(value)) {
    return "Password must not contain Whitespaces.";
  }

  const isContainsUppercase = /^(?=.*[A-Z]).*$/;
  if (!isContainsUppercase.test(value)) {
    return "Password must have at least one Uppercase Character.";
  }

  const isContainsLowercase = /^(?=.*[a-z]).*$/;
  if (!isContainsLowercase.test(value)) {
    return "Password must have at least one Lowercase Character.";
  }

  const isContainsNumber = /^(?=.*[0-9]).*$/;
  if (!isContainsNumber.test(value)) {
    return "Password must contain at least one Digit.";
  }

  const isContainsSymbol =
    /^(?=.*[~`!@#$%^&*()--+={}\[\]|\\:;"'<>,.?/_₹]).*$/;
  if (!isContainsSymbol.test(value)) {
    return "Password must contain at least one Special Symbol.";
  }

  const isValidLength = /^.{10,16}$/;
  if (!isValidLength.test(value)) {
    return "Password must be 10-16 Characters Long.";
  }

  return null;
}

//------------------
// Usage/Example:
let yourPassword = "yourPassword123";
const message = checkPasswordValidity(yourPassword);

if (!message) {
  console.log("Hurray! Your Password is Valid and Strong.");
} else {
  console.log(message);
}

此外,我们可以将所有这些正则表达式模式组合成一个正则表达式:

let regularExpression = /^(\S)(?=.*[0-9])(?=.*[A-Z])(?=.*[a-z])(?=.*[~`!@#$%^&*()--+={}\[\]|\\:;"'<>,.?/_₹])[a-zA-Z0-9~`!@#$%^&*()--+={}\[\]|\\:;"'<>,.?/_₹]{10,16}$/;

注意:上面讨论的正则表达式将检查给定输入值/密码中的以下模式:

  • 它不能包含任何空格。
  • 它必须至少包含一个大写字母、一个小写字母和一个数字字符。
  • 它必须至少包含一个特殊字符。[~`!@#$%^&*()--+={}[]|\:;"'<>,.?/_₹]
  • 长度必须介于 10 到 16 个字符之间。

谢谢!

于 2021-09-22T18:42:53.140 回答
1

如果单独检查长度,可以执行以下操作:

var regularExpression  = /^[a-zA-Z]$/;

if (regularExpression.test(newPassword)) {
    alert("password should contain atleast one number and one special character");
    return false;
} 
于 2012-08-23T11:10:53.810 回答
1

当您重新制作帐户密码时,请确保它是 8-20 个字符,包括数字和特殊字符,例如##\/*- 然后验证新密码并重新输入完​​全相同,应该可以解决密码验证问题

于 2021-02-15T09:29:47.300 回答
1

这是密码验证示例,希望您喜欢。

必须要求使用大写、小写、特殊字符、数字和限制 8 进行密码验证。

function validatePassword(){
    
   var InputValue = $("#password").val();
  var regex = new RegExp("^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[!@#\$%\^&\*])(?=.{8,})");
    $("#passwordText").text(`Password value:- ${InputValue}`);
    
    if(!regex.test(InputValue)) {
         $("#error").text("Invalid Password");
    }
    else{
          $("#error").text("");
    }
}
#password_Validation{
background-color:aliceblue;
padding:50px;
border:1px solid;
border-radius:5px;
}
#passwordText{
  color:green;
}
#error{
color:red;
}
#password{
margin-bottom:5px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="password_Validation">
  <h4>Password validation with Uppercase Lowercase special character and number must be required.</h4>
  <div>
    <input type="password" name="password" id="password">
    <button type="button" onClick="validatePassword()">Submit</button>
   <div>
     <br/>
  <span id="passwordText"></span>
  <br/>
    <br/>
  <span id="error"></span>
<div>

于 2021-06-22T06:20:03.930 回答
1

很有帮助。它将帮助最终用户在输入密码时识别缺少/需要的字符。

这是一些改进,(在这里你可以添加你需要的特殊字符。)

function validatePassword(p) {
    //var p = document.getElementById('newPassword').value,
    const errors = [];
    if (p.length < 8) {
        errors.push("Your password must be at least 8 characters");
    }
    if (p.length > 32) {
        errors.push("Your password must be at max 32 characters");
    }
    if (p.search(/[a-z]/) < 0) {
        errors.push("Your password must contain at least one lower case letter."); 
    }
    if (p.search(/[A-Z]/) < 0) {
        errors.push("Your password must contain at least one upper case letter."); 
    }

    if (p.search(/[0-9]/) < 0) {
        errors.push("Your password must contain at least one digit.");
    }
   if (p.search(/[!@#\$%\^&\*_]/) < 0) {
        errors.push("Your password must contain at least special char from -[ ! @ # $ % ^ & * _ ]"); 
    }
    if (errors.length > 0) {
        console.log(errors.join("\n"));
        return false;
    }
    return true;
}
于 2021-09-22T13:56:23.450 回答
1

我的验证 shema - 大写、小写、数字和特殊字符

new RegExp("^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[^A-Za-z0-9_])")
于 2021-10-04T05:54:49.240 回答
1

国际 UTF-8

这里没有一个解决方案允许使用国际字符,即éÉáÁöÖæÆþÞóÓúÚ,但只关注英文字母。

以下正则表达式使用 unicode UTF-8 来识别大小写,因此允许使用国际字符:

// Match uppercase, lowercase, digit or #$!%*?& and make sure the length is 8 to 96 in length  
const pwdFilter = /^(?=.*\p{Ll})(?=.*\p{Lu})(?=.*[\d|@#$!%*?&])[\p{L}\d@#$!%*?&]{8,96}$/gmu

if (!pwdFilter.test(pwd)) {
    // Show error that password has to be adjusted to match criteria
}

这个正则表达式

/^(?=.*\p{Ll})(?=.*\p{Lu})(?=.*[\d|@#$!%*?&])[\p{L}\d@#$!%*?&]{8,96}$/gmu

检查密码中是否使用了大写、小写、数字或#$!%*?&。它还将长度限制为最小 8 和最大 96,表情符号的长度计为长度中的一个以上字符。最后u,告诉它使用UTF-8。

于 2022-01-31T10:26:00.767 回答