简体   繁体   中英

Alphanumeric JavaScript RegEx for Password Validation

I'm using a regex below to validate password to accept alphanumeric characters only. The regex works if I enter 2 characters one alpha and one number but if more than two characters my regex doesn't work. I want if possible the following results as shown in "Expected Behavior". Can anyone help me rewrite my regex?

JavaScript

  function checkPasswordComplexity(pwd) {
        var regularExpression = /^[a-zA-Z][0-9]$/;
        var valid = regularExpression.test(pwd);
        return valid;
    }

Current Behavior

Password:Valid
a1:true
aa1:false
aa11:false

Expected Behavior

Password:Valid
aa:false (should have at least 1 number) 
1111111:false (should have at least 1 letter)
aa1:true
aa11:true
a1a1a1a1111:true

You want to add "one or more", you're currently checking for a letter followed by a number.

Try:

/^[a-zA-Z0-9]+$/

+ means 'one or more'

I also joined the ranges.

Note: I don't understand why you'd want to limit the password to such a small range though, having a wide character range will make your passwords stronger .

Here is a fiddle demonstrating the correct behavior

If you just want to validate that the password has at least one letter and at least one number, you can check like this:

function checkPasswordComplexity(pwd) {
    var letter = /[a-zA-Z]/; 
    var number = /[0-9]/;
    var valid = number.test(pwd) && letter.test(pwd); //match a letter _and_ a number
    return valid;
}

Try doing this:

var regularExpression = /^[a-zA-Z0-9]+$/;

This means "one or more letter or number."

However, some users might also want to enter symbols (like &*# ) in their passwords. If you just want to make sure there is at least one letter and number while still allowing symbols, try something like this:

var regularExpression = /^(?=.*[a-zA-Z])(?=.*[0-9]).+$/;

The (?=.*[a-zA-Z]) is a positive lookahead. This means that it makes sure that there is a letter ahead of it, but it doesn't affect the regex.

你可以用这个:

/^(?=.*\d)(?=.*[a-z])[a-z\d]{2,}$/i
function checkPasswordComplexity(pwd) {
        var regularExpression = /^(?=.*[0-9])(?=.*[a-zA-Z])([a-zA-Z0-9]+)$/;
        var valid = regularExpression.test(pwd);
        return valid;
    }
{
var pwd=document.getElementById('pwd').value;
var reg = /^[a-zA-Z0-9]{8,}$/;  
var re=reg.test(pwd);
alert(re);

}

I think lookaround aren't supported by javascript, so you can use:

^([a-zA-Z]+\d+)|(\d+[a-zA-Z]+)

But if they are supported:

/^(?=.*\d)(?=.*[a-zA-Z])[a-zA-Z\d]{2,}$/

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM