Javascript 正则表达式验证不需要';I don’我没有按预期工作

Javascript 正则表达式验证不需要';I don’我没有按预期工作,javascript,regex,Javascript,Regex,如果输入了任何值,则返回true如果我只输入一个值,则返回true根据您的评论,我已更新了我的答案: 密码需要在4个条件中至少匹配两个,并具有8个字符才能true var validatePassword = function(password) { var upper = new RegExp(/^(?=.*[A-Z]).+$/), lower = new RegExp(/^(?=.*[a-z]).+$/), symbols = new RegExp(/^(?=.*(

如果输入了任何值,则返回true如果我只输入一个值,则返回true根据您的评论,我已更新了我的答案:

密码需要在
4个条件中至少匹配两个
,并具有
8个字符
才能
true

var validatePassword = function(password) {

    var upper = new RegExp(/^(?=.*[A-Z]).+$/),
    lower = new RegExp(/^(?=.*[a-z]).+$/),
    symbols = new RegExp(/^(?=.*(_|[^\w])).+$/),
    numbers = new RegExp(/^(?=.*\d).+$/);

    if((upper.test(password) && lower.test(password)) || (upper.test(password) && numbers.test(password)) || (upper.test(password) && symbols.test(password)) || (lower.test(password) && numbers.test(password)) || (lower.test(password) && symbols.test(password)))
    {
        return true;
    }
    else
    {
        alert('Invalid password')
    }
}
validatePassword('Foo1!');
});
你应该做:

var validatePassword = function(password) {

    var numero = 0;
//check if a digit is present    
if(/(?=.*?[\d]).*$/.test(password)) {
     numero++;
}
//check if a uppercase letter is present  
if(/(?=.*?[A-Z]).*$/.test(password)) {
        numero++;
}
//check if a lowercase letter is present
if(/(?=.*?[a-z]).*$/.test(password)) {
         numero++;
}
//check if a special character is present
if(/(?=.*?(_|[^\w])).*$/.test(password)) {
         numero++;
}
//check if at least 8 characters are present        
if (/^(?=.{8,}).*$/.test(password)) {
    var length = true;
} 

if( numero>=2 && length){

        alert('Valid password');
        console.log(numero);
        return true;
    }
    else
    {
        alert('Invalid password');
        console.log(numero);
    }

}
validatePassword('foo4ogD!');
致:


你的正则表达式已经是正则表达式了。您不需要使用
newregexp(“patter”、“flag”)

让我们先简化逻辑

var upper = /^(?=.*[A-Z]).+$/,
    lower = /^(?=.*[a-z]).+$/,
    symbols = /^(?=.*(_|[^\w])).+$/,
    numbers = /^(?=.*\d).+$/;
以上内容可以简化

var upper = new RegExp(/^(?=.*[A-Z]).+$/),
    lower = new RegExp(/^(?=.*[a-z]).+$/),
    symbols = new RegExp(/^(?=.*(_|[^\w])).+$/),
    numbers = new RegExp(/^(?=.*\d).+$/);
// means must have (upper AND lower) OR ((upper OR lower) AND (symbol OR number))
if( 
    (upper.test(password) && lower.test(password)) ||
    (upper.test(password) && numbers.test(password)) ||
    (upper.test(password) && symbols.test(password)) ||
    (lower.test(password) && numbers.test(password)) ||
    (lower.test(password) && symbols.test(password))
  )
var symbolsnumbers = /[\d\W_]/; // means it contains number OR non-word OR underscore
也在这里

var upper = /[A-Z]/,       // means it contains uppercase
    lower = /[a-z]/,       // means it contains lowercase
    symbols = /[\W_]/,     // means it contains non-word character or underscore
    numbers = /\d/;        // means it contains number
以上内容可以简化

var upper = new RegExp(/^(?=.*[A-Z]).+$/),
    lower = new RegExp(/^(?=.*[a-z]).+$/),
    symbols = new RegExp(/^(?=.*(_|[^\w])).+$/),
    numbers = new RegExp(/^(?=.*\d).+$/);
// means must have (upper AND lower) OR ((upper OR lower) AND (symbol OR number))
if( 
    (upper.test(password) && lower.test(password)) ||
    (upper.test(password) && numbers.test(password)) ||
    (upper.test(password) && symbols.test(password)) ||
    (lower.test(password) && numbers.test(password)) ||
    (lower.test(password) && symbols.test(password))
  )
var symbolsnumbers = /[\d\W_]/; // means it contains number OR non-word OR underscore
因为它只能是(上部和下部)

它可以用计算机进行测试

upper.test(password) && lower.test(password)
因为它必须有(上或下),所以也可以一步检查

var upandlow = /[a-z][A-Z]|[A-Z][a-z]/;
var upperlower = /[a-zA-Z]/;   // means it contains uppercase OR lowercase
因为它必须有(符号或数字),所以也可以一步检查它

var upandlow = /[a-z][A-Z]|[A-Z][a-z]/;
var upperlower = /[a-zA-Z]/;   // means it contains uppercase OR lowercase
现在整个功能可以简化了

var upper = new RegExp(/^(?=.*[A-Z]).+$/),
    lower = new RegExp(/^(?=.*[a-z]).+$/),
    symbols = new RegExp(/^(?=.*(_|[^\w])).+$/),
    numbers = new RegExp(/^(?=.*\d).+$/);
// means must have (upper AND lower) OR ((upper OR lower) AND (symbol OR number))
if( 
    (upper.test(password) && lower.test(password)) ||
    (upper.test(password) && numbers.test(password)) ||
    (upper.test(password) && symbols.test(password)) ||
    (lower.test(password) && numbers.test(password)) ||
    (lower.test(password) && symbols.test(password))
  )
var symbolsnumbers = /[\d\W_]/; // means it contains number OR non-word OR underscore
这是你的电话号码

祝你好运
:)

你能做到这一点吗您是否可以添加更多的案例,如
test('Foo1!',true)
其中第二个参数指示密码是否有效,只有其中两个可以成功完成,我的条件是这样的密码将区分大小写,并将遵循hotmail当前的密码选择标准,该标准要求用户选择以下内容作为必填项:-!5.1. 至少8个字符;!5.2. 至少包含以下两项:-!i) 大写字母!ii)小写字母!iii)数字!iv)符号!好的,我会这样做,待命。只要检查JSFIDLE上的代码,我已经更新了你的链接,但它只给了我一个结果true@UzairAhmad密码需要与
4个条件中的至少两个
相匹配
才能符合您的要求。