【问题标题】:JavaScript and HTML Regex not workingJavaScript 和 HTML 正则表达式不起作用
【发布时间】:2018-02-20 21:47:48
【问题描述】:

我有一个php页面:

<?php
    if($_SERVER['REQUEST_METHOD'] == 'POST'){
        echo $_POST["username"];
        echo $_POST["password"];
        echo $_POST["confirm_password"];
        echo $_POST["email"];
    }
?>
<!DOCTYPE html>
<html>
<head>
    <title>WordCat Signups</title>
    <script type="text/javascript" src="signup_validate.js"></script>
</head>
<body>
    <form action="" method="POST">
        Username:<br><input type="text" name="username" placeholder="Username" onkeyup="check_username();"><span id="check_username"></span><br>
        Password:<br><input type="password" name="password" placeholder="Password" onkeyup="check_password();"><span id="check_password"></span><br>
        Confirm Password:<br><input type="password" name="confirm_password" placeholder="Confirm Password" onkeyup="check_passwords();"><span id="check_passwords"></span><br>
        Email:<br><input type="email" name="email" placeholder="Email" onkeyup="check_email();"><span id="check_email"></span><br>
        <input type="submit" name="submit" value="Signup"></br>
    </form>
</body>
</html>

我有一些用于检查字段的 JavaScript:

function check_username(){
    var username = document.getElementsByName("username")[0].value;
    var pattern = /^[\w[^!\"\#$%&\'()*+,\-.\/:;<=>?@\[\\\]^_`{|}~]]{1,32}$/;
    if(pattern.test(username)){
        document.getElementById("check_username").innerHTML = "Username is valid.";
    } else {
        document.getElementById("check_username").innerHTML = "Username is invalid. It should only contain letters, numbers, and underscores, as well as have a maximum of 32 characters.";
    }
}
function check_password(){
    var password = document.getElementsByName("password")[0].value;
    var pattern = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)([a-zA-z0-9!\"\#$%&\'()*+,\-.\/:;<=>?@\[\\\]^_`{|}~]{6,})$/;
    if(pattern.test(password)){
        document.getElementById("check_password").innerHTML = "Password is valid.";
    } else {
        document.getElementById("check_password").innerHTML = "Password is invalid. It should have at least 6 characters, and at least one number, uppercase, and lowercase character.";
    }
}
function check_passwords(){
    var password = document.getElementsByName("password")[0].value;
    var confirm_password = document.getElementsByName("confirm_password")[0].value;
    if(password == confirm_password){
        document.getElementById("check_passwords").innerHTML = "Passwords match";
    } else {
        document.getElementById("check_passwords").innerHTML = "Passwords do not match.";
    }
}

但是,对于 JavaScript,用户名和确认密码测试有效,但密码正则表达式无效。当我输入有效密码时。正则表达式可以在这里找到link,它对所有测试都是正确的。但是,当使用我的浏览器时,正则表达式无法在线获取有效密码!

【问题讨论】:

  • 密码正则表达式看起来不错,只是[A-z] 已经匹配\[]^_`,因此您不必在字符类中指定它们。
  • 您对哪个密码有疑问?
  • 我的意思是 A-Z 对不起
  • 嗯实际上我认为这是因为我在 XAMPP 上的 localhost 没有更新并显示我的更改...
  • 问题解决了!

标签: javascript php html regex


【解决方案1】:

抱歉给大家添麻烦了。问题不是我的代码,而是 XAMPP 没有更新代码。在我用 Ctrl+F5 硬刷新它之后,它运行良好。谢谢!

【讨论】:

    【解决方案2】:

    我认为没有理由将单个正则表达式用于像您这样的复杂条件(除了炫耀您的正则表达式)...

    if(
        password.length >= 6 &&  // at least 6 characters
        /[0-9]/.test(password) && // at least one number
        /[a-z]/.test(password) && // at least one lowercase character
        /[A-Z]/.test(password) // at least one lowercase character
    ) {
        // yay :)
    }
    

    【讨论】:

    • 谢谢,我将使用它来提高密码强度!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-18
    • 2014-09-12
    • 2015-07-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多