角度正则表达式

时间:2015-08-21 15:42:21

标签: javascript jquery regex angularjs

我在angular中创建了一个正则表达式来验证密码,该密码应该有

  1. 一个数字
  2. 大写字母
  3. 小写字母
  4. 只有少数符号,例如!@#$%
  5. 任何字符或符号的位置都不受限制。

    我试过这个regex

    /(?=.*[a-z])(?=.*[A-Z])(?=.*[^a-zA-Z])/
    

    但是上面的正则表达式让任何特殊字符都有效......我只是想要!@#$%这个有效无效

2 个答案:

答案 0 :(得分:0)

尝试使用ng-change侦听器 - 类似于以下HTML:

<input ng-model="pw" ng-change="checkPwPolicy(pw)"> 
<div ng-hide="passwordPolicyValid">Your password is too weak!</div>

在此表单的控制器范围内结合此Javascript:

function checkPwPolicy(password) {
  var valid = true;

  // at least 1 number
  valid = valid && password.match(/[0-9]/).length > 0;
  // at least 1 uppercase
  valid = valid && password.match(/[A-Z]/).length > 0;

  // ...
  $scope.passwordPolicyValid = valid;
}

您可以采取的一些措施来改进此实现,即可以减少更改侦听器的触发次数,在未触及密码时隐藏错误消息,以及向密码策略消息添加更详细的错误。 / p>

答案 1 :(得分:0)

我不确定你想要做的所有事情都可以用于单一的正则表达式。但是你可以使用一个使用一些正则表达式的简单验证函数:

function validate (pass) {
    if (
        /[A-Z]/.test(pass) && // uppercase letter is required
        /[a-z]/.test(pass) && // lowercase letter is required
        /[0-9]/.test(pass) && // number is required
        /[!@#$%]/.test(pass) && // predefined symbol is required
        !/[^A-Za-z0-9!@#$%]/.test(pass) // there is nothing unwanted 
    ) {
        return true;
    }
    return false;
}

Here is jsfiddle表明它有效。