javascript - 为什么我的 Javascript 表单验证不能正常工作?

标签 javascript forms validation

为什么我的验证在第二次尝试时失败了?第一次尝试验证工作正常,但在第二次运行时,它将接受电子邮件字段中的不适当值。前两个字段工作正常,但第三个字段将在第一次运行后接受任何文本。但是,它仅在我更改电子邮件字段中的值时才会验证,否则它将继续显示错误并且无法正常验证。

function validate(){

    clearErrors();

    var errorFlag = true;

    var name = document.getElementById("name");

    nameVal = name.value;

    if(nameVal.length === 0){

        var nameError = document.getElementById("nameError");

        nameError.style.display = "block";

        errorFlag = false;
    }

    var phone = document.getElementById("phone")

    var phoneVal = phone.value;

    if(isNaN(phoneVal) || (phoneVal < 1000000000 || phoneVal >10000000000)){

        errorFlag = false;

        var phoneError = document.getElementById("phoneError");

        phoneError.style.display = "block";
    }



    var email = document.getElementById("email");

    var emailVal = email.value;

    var reStr = "^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}$";

    if((reStr.match(emailVal))){

        errorFlag = false;

        var emailError = document.getElementById("emailError");

        emailError.style.display = "block";
    }

    return errorFlag;
}

function clearErrors(){

    var nameError = document.getElementById("nameError");

    nameError.style.display = "none";

    var phoneError = document.getElementById("phoneError");

    phoneError.style.display = "none";

    var emailError = document.getElementById("emailError");

    emailError.style.display = "none";

}

最佳答案

您的验证器将在电子邮件上失败,因为您正在向 .match 提供一个字符串,而它需要一个正则表达式。

您还必须对电子邮件本身调用 .match,并将正则表达式作为参数。

还需要对返回值取反,检查是否不匹配,或者使用.test

这个位:

var reStr = "^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}$";
if((reStr.match(emailVal))){

应替换为:

var re = /^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}$/i;
if(!emailVal.match(re)){

如果您出于某种原因不能使用正则表达式文字:

var re = new RegExp("^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}$", "i");
if(!emailVal.match(re)){

或者使用.test代替.match:

var re = /^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}$/i;
if(!re.test(emailVal)){

请注意 i 用于不区分大小写的匹配,因此不必全大写输入电子邮件。

关于javascript - 为什么我的 Javascript 表单验证不能正常工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36784381/

相关文章:

php - 为什么我的 php 脚本不返回结果?

spring - 如何获取Hibernate Validator的ValidationException的插值消息

javascript - 日期验证(日期不应在现有日期范围内)

forms - 在触发取消按钮之前激活 Angular 表单验证

javascript - 如果 id 包含固定字符串,我们可以使用 Ext.ComponentQuery.query

javascript - 如何按顺序应用 CSS 更改?

css - Bootstrap 覆盖了我网站上表单上的提交按钮

javascript - ToggleShow 元素只在这个特定的div中点击显示

javascript - Reducer 不更新状态

当数据库中不存在电子邮件时,PHP 注册表单会告诉用户电子邮件已存在