Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么这个javascript正则表达式不起作用?_Javascript_Regex_Flask - Fatal编程技术网

为什么这个javascript正则表达式不起作用?

为什么这个javascript正则表达式不起作用?,javascript,regex,flask,Javascript,Regex,Flask,我用javascript编写了一个正则表达式,用于密码验证,但它也适用于无效密码。密码必须是8个字符长,包含一个字母、一个数字和一个特殊字符,但当我输入类似“abcd”的内容时,它也可以工作。代码如下: function nonValidPassword(e){ let userPassword = document.getElementById("register-password").value; const passwdMessage = docume

我用javascript编写了一个正则表达式,用于密码验证,但它也适用于无效密码。密码必须是8个字符长,包含一个字母、一个数字和一个特殊字符,但当我输入类似“abcd”的内容时,它也可以工作。代码如下:

function nonValidPassword(e){

    let userPassword = document.getElementById("register-password").value;
    const passwdMessage = document.getElementById("password-validation-message");
    const registerButton = document.getElementById("register-button");
    let validPassword = new RegExp("^(?=.*[a-zA-Z])(?=.*[0-9])(?=.*[!@#\$%\^&\*])(?=.{8,})");
    let passwordChecker = validPassword.test(userPassword);
    
    if (passwordChecker==false){
        e.preventDefault();
        alert("PLEASE ENTER A VALID PASSWORD!");
        
    }
    
    else
    {
        document.form.submit();
        
    }
}


registerButton.addEventListener('click',nonValidPassword);
后端是:

from flask import Flask,render_template,request,redirect,url_for
import model
import datetime

app = Flask(__name__)


@app.route("/",methods=["POST","GET"])
def login():
    if request.method == "GET":
        return render_template("login.html")
    else:
        email = request.form["email"]
        username= request.form["username"]
        password = request.form["password"]
        username_exists = model.check_if_username_exists(username)
        if username_exists:
            return render_template("register.html",infoMsg=f"sorry, the username {username} already exists! ")
        else:
            model.register_new_user(email,username,password)
            return render_template("login.html",infoMsg=f"{username} successfully registered!")

@app.route("/register")
def register():
    return render_template("register.html")
这是模板:

<!DOCTYPE html>
<html lang="en">
<head>
   
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="stylesheet" href="static/style.css">
    <link href="https://fonts.googleapis.com/css2?family=Jua&display=swap" rel="stylesheet">
    <title>Calendar Lite</title>
</head>
<body>
    
    <div class="login-container">
       
        
    
    <div class="login-field">
        
     <form method="POST" action="/" id="login-form">
            {{infoMsg}}
            <div id="password-validation-message"></div>
            <h1>Please enter the following parameters: </h1>
            <label for="username">Username:</label>
            <input type="text" name="username" ><br><br>
            <label for="username">Email:</label>
            <input type="text" name="email" ><br><br>
            <label for="password">Password (must at least 8 characters long, should have at least one alphabet letter, one special character and at least one number.):</label><br>
            <input type="password" name="password" id="register-password"><br><br>
            <button type="submit" class="btn-submit" id="register-button">REGISTER</button><br><br>

            <h4><a href="/" class="btn"> I have an account</a></h4>
          </form>

    
          
            
    </div>

    <img src="static/login-picture.png" alt="pic" class="login-picture" width="1000px">
    </div>

    <script src="static/register.js"></script>
</body>
</html>

日历精简版
{{infoMsg}}
请输入以下参数:
用户名:


电邮:

密码(长度必须至少为8个字符,至少应有一个字母、一个特殊字符和至少一个数字):


注册


正则表达式的问题几乎是一个输入错误,但它缺少一个结束锚。使用此版本:

^(?=.*[a-zA-Z])(?=.*[0-9])(?=.*[!@#\$%\^&\*]).{8,}$
更新代码:

let validPassword = new RegExp("^(?=.*[a-zA-Z])(?=.*[0-9])(?=.*[!@#\$%\^&\*]).{8,}$");
上述更新的正则表达式表示:

^                        from the start of the password
    (?=.*[a-zA-Z])       assert that one letter is present
    (?=.*[0-9])          assert that one number is present
    (?=.*[!@#\$%\^&\*])  assert one symbol
    .{8,}                then match any 8 or more characters
                         (this also contains the length requirement)
$                        end of the password

看来你的正则表达式很好,我也能按原样跑步了。你能更具体地说明你所说的“它也有效”是什么意思吗?Thanks@MattNewelski它似乎不工作。我的意思是,演示报告了一个匹配,但它是零宽度匹配,输入的密码与正则表达式不匹配,因为模式不匹配。我解决了它。问题是const registerButton在函数范围内,所以当我给它一个eventlistener时,它报告了一个错误。一旦我把它放在全球范围内,它就工作得很好。