使用正则表达式在JS中进行密码验证

时间:2013-11-19 06:21:59

标签: javascript regex validation error-handling passwords

在下面的代码中,第一个和最后一个正则表达式总是将“enter again”作为输出,而第二个正则表示“welcome”作为输出。 错误在哪里?我正在传递值 code:<form action="homepage.php" name="myForm" method="post"> <input type="submit" name="s" value="GO" onclick="return validateForm()">
我想在验证后重定向到homepage.php。

<script type="text/javascript">
  function validateForm() {
    var x = document.forms["myForm"]["user"].value;
    var atpos = x.indexOf("@");
    var dotpos = x.lastIndexOf(".");

    if (atpos < 1 || dotpos < atpos + 2 || dotpos + 2 >= x.length) {
      alert("Not a valid e-mail address");
      return false;
    }

    var y = document.forms["myForm"].elements["pass"].value;
    //var passw=/^.*(?=.{8,})(?=.*[a-zA-Z])(?=.*\d)(?=.*[!#$%&? "]).*$/;
    var passw = /^((?=.*[a-zA-Z])(?=.*\d)(?=.*[#@%$]).{5,10})$/;

    alert(x);
    alert(y);

    //var passw=/^[A-Za-z0-9]\w{5,10}$/; 

    if (y.match(passw)) {
      alert('Welcome')
      return true;
    } else {
      alert('enter again')
      return true;
      exit();
    }
  }
 </script>

1 个答案:

答案 0 :(得分:0)

对我来说,你在网上发现了第一个正则表达式然后进行了修改吗?最初的正则表达式是:

 ^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[#?!@$%^&*-]).{5,10}$

哪个应该正常工作。

Credit to anubhava


至于为什么你的尝试不起作用:

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

据我所知,唯一的问题是它不会限制长度,也不会检查是否有大写字母和小写字母([a-zA-Z]匹配任何大小写字符)。

/^((?=.*[a-zA-Z])(?=.*\d)(?=.*[#@%$]).{5,10})$/

我能看到的唯一错误是它没有强制执行每个案例的字符。如上所述,它只需要一个字母的任何一个字母。

/^[A-Za-z0-9]\w{5,10}$/ 

这个人说找到[A-Za-z0-9]的单个字符,然后找到5-10个字符(除了包括_ ie [A-Za-z0-9_]之外是相同的)。所以这将匹配任何6-11字符没有符号的字符串,但它不强制每个上,下和数字1。它可以是0000000aaaaaaaaAAAAAAAA甚至是a______