【问题标题】:Regex for password must contain at least eight characters, at least one number and both lower and uppercase letters [duplicate]密码的正则表达式必须包含至少八个字符,至少一个数字以及大小写字母[重复]
【发布时间】:2021-04-21 17:40:06
【问题描述】:

我正在使用

/^(?=.\d)(?=.[az])(?=.*[AZ])[0-9a-zA-Z]{8,}$ /

但问题是当我添加任何特殊字符(如 !/@/#... 等)时,此正则表达式无效。

例如:

“Customer12”有效。 “@Customer12”无效

我需要一个“Customer12”和“@Customer12”有效的正则表达式。 正则表达式不会受到特殊字符的影响 (~!@#$%^&*()_+)。

如何创建密码必须包含至少八个字符、至少一个数字以及大小写字母的正则表达式?

【问题讨论】:

  • 我还没有测试过@Amaarrockz 解决方案,但是,使用正则表达式对于紧凑性是有意义的。我将发布一个不使用正则表达式进行比较的答案
  • (?=.*\d)(?=.*[a-z]).{8,} 使用这个正则表达式

标签: javascript reactjs angularjs regex vue.js


【解决方案1】:

Regex 在简洁性方面更胜一筹。但这里有一个非正则表达式的解决方案,它对于非正则表达式的语言学家来说变得更加可读:

function validatePasswordWithoutRegex(pw) {
    // Regex for password must contain at least eight characters, at least one number and both lower and uppercase letters
    
    
    pw = pw.trim();
    
    // must contain at least eight characters
    if (pw.length < 8) return false;
    
    let alpha = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    let numeric = "0123456789";
    
    
    // at least one number 
    let okay = false;
    for (var i = 0; i < numeric.length; i++) {
        if ( pw.indexOf( numeric.charAt( i ) ) != -1) {
            okay = true;
            break;
        }
    }
    if ( !okay ) return false;
    
    // and both lower and uppercase letters (upper)
    okay = false;
    for (var i = 0; i < alpha.length; i++) {
        if ( pw.indexOf( alpha.charAt( i ) ) != -1) {
            okay = true;
            break;
        }
    }
    if ( !okay ) return false;
    
    // and both lower and uppercase letters (lower)
    okay = false;
    for (var i = 0; i < alpha.length; i++) {
        if ( pw.indexOf( alpha.charAt( i ).toLowerCase() ) != -1) {
            okay = true;
            break;
        }
    }
    if ( !okay ) return false;
    
    
    return true; // passed requirements

}

console.log( validatePasswordWithoutRegex( "ABC" ) );
    console.log( validatePasswordWithoutRegex( "hello world" ) );
    console.log( validatePasswordWithoutRegex( "he12World" ) );
    console.log( validatePasswordWithoutRegex( "12345678" ) );
    console.log( validatePasswordWithoutRegex( "123a5678" ) );
    console.log( validatePasswordWithoutRegex( "123a56B8" ) );
    console.log( validatePasswordWithoutRegex( "Hello12rld" ) );

【讨论】:

    【解决方案2】:

    正则表达式 至少八个字符,至少一个字母和一个数字:

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

    如果你想要至少八个字符,至少一个字母和一个数字和一个特殊字符,那么你可以使用下面的表达式。

    /"^(?=.*[A-Za-z])(?=.*\d)(?=.*[@$!%*#?&])[A-Za-z\d@$!%*#?&]{8,}$/
    

    【讨论】:

      猜你喜欢
      • 2021-09-08
      • 2023-01-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多