函数调用后表单验证不清除

form validation does not clear after function call

我正在编写一段代码来检查有效的用户凭据,就像在我的应用程序中一样:

@app.route('/register', methods=('GET', 'POST'))
def register():
    if request.method == 'POST':
        username = request.form['username']
        email = request.form['email']
        password = request.form['password']
        db = get_db()
        error = None

        if not username:
            error = 'Username is required'
        if validate_user(username) is False:
            error = 'Usernames must be 5 to 10 in length, not start with a number and use only lowercase.'
        elif not email:
            error = 'Email is required'
        elif not password:
            error = 'Password is required'

用户的验证函数中,代码如下:

def validate_user(user):
    valid_user = re.compile(r'\D{1}[D\d]{4,9}')
    matched = valid_user.match(user)
    if matched:
        return True
    else:
        return False

在我使用 的表单中,我有以下代码,特定于 user 部分:

{% block content %}
  <form method="post">
  <div>
    <label for="username">Username</label>
    <input type="text" name="username" id="username" size="45"
           title="cannot start with a number, have a length of 5 to 10 non-special characters" required>
   </div>

当我测试这个功能时,即使一切看起来都已到位,页面也没有通过注册。真的在这上面旋转我的轮子,因为它看起来很微不足道......

此模式 \D[D\d]{4,9} 匹配除数字以外的任何字符,然后匹配 D 字符或数字 4-9 次。没有$也是未锚定的,最大长度有re.match return一个匹配对象不是10

如果您需要用户名:

Usernames must be 5 to 10 in length, not start with a number and use only lowercase.

\D[^A-Z]{4,9}$

Regex demo

注意 \D[^A-Z] 也可以匹配空格和换行符。

如果不允许,您可以使用否定字符 class 从范围中排除 \s。当您在代码中使用 re.match 时,您可以省略 ^ 锚点。

[^\s\d][^\sA-Z]{4,9}$

Regex demo