【问题标题】:Jquery regex patterns not validatingJquery 正则表达式模式未验证
【发布时间】:2020-11-05 16:55:26
【问题描述】:

我正在使用 Java servlet 和 JSP 处理网页。我目前在使用 HTML 表单和使用 Jquery 使用正则表达式模式进行一些快速客户端验证时遇到问题。我正在最新版本的 Intellij Ultimate 上运行和编译。

使用正则表达式模式编写验证并在第一次对其进行测试时,它工作得非常好,并且仅在它破坏了正则表达式模式时才显示消息。但是,现在,在重新启动我的笔记本电脑后,它说我的模式被破坏了,即使我提供了有效的输入。我已经在线测试了我的正则表达式,我所有的模式都在做我想要的。

由于某种原因,它允许我在输入字段中输入一个字符并接受它,但不能超过一个字符,它会显示我的消息说模式已被破坏。

这是我编写方式的问题还是 Jquery 的错误?

编辑:再次启动我的笔记本电脑后,我现在根本没有得到任何验证,就好像它没有检测到我的 javascript 文件一样。

我将我的 javascript 写在一个不同的文件中,并在头部链接到使用 Jquery 的链接:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.19.1/jquery.validate.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.19.1/additional-methods.min.js"></script>
<script src="form_validation.js"></script>

我的表格:

<form action="CreateAccount" method="post" name = "CreateAccountForm" id = "CreateAccountForm">
    <label for="firstname">First name:</label><br>
    <input type="text" id="firstname" name="firstname"><br>

    <label for="lastname">Last name:</label><br>
    <input type="text" id="lastname" name="lastname"><br>

    <label for="username">Username:</label><br>
    <input type="text" id="username" name="username"><br>

    <label for="password">Password</label><br>
    <input type="password" id="password" name="password"><br>

    <label for="phone">Phone Number</label><br>
    <input type="text" id="phone" name="phone"><br>

    <label for="email">Email</label><br>
    <input type="email" id="email" name="email"><br><br>

    <input type="submit" value="Submit">

</form>

我的 Jquery:

$(function () {
    $('CreateAccountForm').validate({
        rules: {
            firstname:{
                required:true,
                pattern: /^[a-zA-Z]+$/,
                maxlength: 50

            },
            lastname:{
                required:true,
                pattern: /^[a-zA-Z]+$/,
                maxlength: 50
            },
            username:{
                required:true,
                pattern: /^[^ ]+$/,
                maxlength: 50
            },
            password:{
                required:true,
                pattern: /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z\d]{8,15}$/
            },
            phone:{
                required:true,
                pattern: /^\d{2}-\d{4}-\d{7}$/
            },
            email:{
                required:true,
                email:true,
                maxlength: 50
            }

        },
        messages:{
            firstname:{
                required: " A first name is required",
                pattern: " First name must only contain characters a-z",
                maxlength: "Must be less than 50 characters"


            },
            lastname:{
                required: " A last name is required",
                pattern: " Last name must only contain characters a-z",
                maxlength: "Must be less than 50 characters"
            },
            username:{
                required: " A user name is required",
                pattern: " User name cannot have spaces",
                maxlength: "Must be less than 50 characters"
            },
            password:{
                required: " A password is required",
                pattern: " Password must contain: " +
                    "At least one upper case letter, " +
                    "At least one lower case letter, " +
                    "At least one number " +
                    "and be between 8-15 characters."
            },
            phone:{
                required: " A phone number is required",
                pattern: " Phone number must be in the format **-****-*******"
            },
            email:{

                required: " An email is required",
                email: " Not a valid email address format",
                maxlength: "Must be less than 50 characters"
            }

        }

    })

})

【问题讨论】:

  • 检查控制台中的错误 - 您提供的代码有一个重大错误(在 id 选择器中没有 #),但在验证时也会出错
  • 您使用的是哪个 jQuery 插件?你用的不是jqueryvalidation.org/documentation 吗?
  • @Technoh 库包含在问题中
  • 谢谢,这意味着你至少有一件事错了。我会写一个答案。
  • 没有 max_length 方法,该方法是 maxlength - 它在控制台错误中告诉你这一点(“检查 max_length 方法”) - 投票关闭是一个错字。

标签: javascript html jquery jquery-validate


【解决方案1】:

根据documentation 没有max_length 验证,正确使用的是maxlength。所以是这样的:

        firstname:{
            required:true,
            pattern: /^[a-zA-Z]+$/,
            maxlength: 50
        }, // etc.

【讨论】:

  • 是的,我意识到了这一点,并且我已经将其更改为 maxlength,但错误仍然存​​在。
  • 添加多个正确字符后的错误是在所有元素上触发还是仅在部分元素上触发?
  • 它发生在所有元素上,但现在没有进行任何验证,就好像它现在忽略了整个 form_validation.js 文件
  • nope 在 chrome 或 IDE 中的控制台中没有错误