【Java 进阶篇】JavaScript 表单验证详解

news2024/11/19 10:46:54

在这里插入图片描述

JavaScript 表单验证是网页开发中不可或缺的一部分。它允许您确保用户在提交表单数据之前输入了有效的信息。无论您是一个初学者还是一个有经验的开发人员,本文将为您详细介绍如何使用 JavaScript 来进行表单验证。我们将从基础知识开始,逐步深入,以确保您全面了解这个主题。

为什么需要表单验证?

在网页应用程序中,表单是用户与应用之间进行数据交互的主要方式。用户输入的数据可能包含各种信息,例如注册信息、登录凭据、搜索查询等。表单验证的目的是确保这些数据的合法性和完整性。它可以用来:

  • 防止恶意输入:恶意用户可能试图提交不合法或有害的数据。
  • 提高用户体验:通过验证,可以在用户提交表单之前提供及时反馈,帮助用户更容易地纠正错误。
  • 保护数据完整性:确保数据的准确性,防止数据损坏或丢失。
  • 避免服务器负担:在数据传输到服务器之前检查数据的有效性,减少服务器端的负担。

基本的 HTML 表单结构

在深入了解 JavaScript 表单验证之前,让我们首先了解基本的 HTML 表单结构。以下是一个简单的表单示例:

<!DOCTYPE html>
<html>
<head>
    <title>表单验证示例</title>
</head>
<body>
    <form id="myForm">
        <label for="name">姓名:</label>
        <input type="text" id="name" name="name">
        <br>

        <label for="email">电子邮件:</label>
        <input type="email" id="email" name="email">
        <br>

        <input type="submit" value="提交">
    </form>
</body>
</html>

这是一个简单的包含姓名和电子邮件字段的表单。用户可以在这个表单中输入信息并点击 “提交” 按钮。

JavaScript 表单验证的基础

为了进行表单验证,我们需要使用 JavaScript 来检查用户输入的数据。以下是一个简单的 JavaScript 函数,用于验证上面的表单:

function validateForm() {
    var name = document.getElementById("name").value;
    var email = document.getElementById("email").value;

    if (name === "") {
        alert("姓名不能为空");
        return false;
    }

    if (email === "") {
        alert("电子邮件不能为空");
        return false;
    }

    return true;
}

这个函数首先获取表单中的姓名和电子邮件字段的值,然后检查它们是否为空。如果任何一个字段为空,它将显示一个警告框并返回 false,防止表单提交。否则,它将返回 true,允许表单提交。

接下来,我们需要将这个验证函数与表单关联起来。这可以通过在表单的 onsubmit 属性上设置函数名来完成:

<form id="myForm" onsubmit="return validateForm()">
    <!-- 表单字段 -->
</form>

现在,当用户尝试提交表单时,validateForm 函数将被调用,并根据验证的结果来决定是否允许提交。

常见的表单验证技巧

上面的示例演示了一个非常基本的表单验证。在实际应用中,您可能需要更多的验证技巧来确保数据的准确性。以下是一些常见的表单验证技巧:

检查电子邮件格式

验证电子邮件地址是否符合正确的格式是非常重要的。您可以使用正则表达式来进行电子邮件验证。以下是一个验证电子邮件格式的 JavaScript 函数示例:

function validateEmail(email) {
    var emailPattern = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/;
    return emailPattern.test(email);
}

您可以在 validateForm 函数中使用这个函数来验证电子邮件字段。

检查密码强度

如果您正在处理用户注册或更改密码,通常需要确保密码足够强大。密码强度验证通常包括以下要求:

  • 至少 8 个字符
  • 包含至少一个大写字母
  • 包含至少一个小写字母
  • 包含至少一个数字
  • 包含至少一个特殊字符(例如,!@#$%^)

您可以编写 JavaScript 函数来验证密码是否符合这些要求。

检查重复密码

如果您要求用户输入密码两次(通常是为了确保他们没有输错),您还需要验证这两次输入是否匹配。在 validateForm 函数中,您可以添加代码来检查密码字段和确认密码字段是否相同。

数值范围验证

如果您正在处理数值输入,例如年龄或金额,您可能需要验证这些数值是否在允许的范围内。您可以使用条件语句来检查数值是否大于或小于特定值,并在不符合要求时提供错误消息。

自定义验证错误消息

在上面的示例中,我们使用 alert 函数来显示验证错误消息。然而,这并不是最好的用户体验,通常我们会希望将错误消息直接显示在页面上,以便用户更容易理解。为此,您可以使用 HTML 元素来显示错误消息,并根据验证结果显示或隐藏它们。

<form id="myForm" onsubmit="return validateForm()">
    <label for="name">姓名:</label>
    <input type="text" id="name" name="name">
    <div id="nameError" class="error"></div>
    <br>
    
    <label for="email">电子邮件:</label>
    <input type="email" id="email" name="email">
    <div id="emailError" class="error"></div>
    <br>

    <input type="submit" value="提交">
</form>

在上述代码中,我们为每个表单字段后面添加了一个 <div> 元素,用于显示错误消息。这些 <div> 元素都有一个共同的 class,叫做 “error”,我们可以使用 CSS 来定义 “error” 类的样式,以使错误消息在需要时显示出来。以下是一个简单的示例 CSS 样式,可以在页面头部的 <style> 标签中添加:

<style>
    .error {
        color: red;
        font-size: 14px;
        display: none;
    }
</style>

这个 CSS 样式定义了错误消息的颜色为红色,字体大小为14像素,并将 display 属性设置为 none,以便默认情况下错误消息是隐藏的。

接下来,我们需要修改 validateForm 函数,以在发现验证错误时显示错误消息,并在验证通过时隐藏它们。下面是修改后的 validateForm 函数:

function validateForm() {
    var name = document.getElementById("name").value;
    var email = document.getElementById("email").value;
    var nameError = document.getElementById("nameError");
    var emailError = document.getElementById("emailError");

    // 隐藏所有错误消息
    nameError.style.display = "none";
    emailError.style.display = "none";

    if (name === "") {
        nameError.style.display = "block";
        nameError.innerHTML = "姓名不能为空";
        return false;
    }

    if (email === "") {
        emailError.style.display = "block";
        emailError.innerHTML = "电子邮件不能为空";
        return false;
    }

    return true;
}

在这个修改后的函数中,我们首先获取了错误消息的 <div> 元素,然后将它们隐藏(style.display = "none")。在验证失败时,我们设置相应的错误消息为 block 来显示它们,并使用 .innerHTML 属性来设置错误消息的文本内容。

这种方式不仅提供了更好的用户体验,还使错误消息更容易自定义样式和内容。

实际案例:注册表单验证

为了更好地理解表单验证的实际应用,让我们创建一个简单的用户注册表单,并对其进行验证。

HTML 注册表单

<!DOCTYPE html>
<html>
<head>
    <title>用户注册</title>
    <style>
        .error {
            color: red;
            font-size: 14px;
            display: none;
        }
    </style>
</head>
<body>
    <h1>用户注册</h1>
    <form id="registrationForm" onsubmit="return validateForm()">
        <label for="username">用户名:</label>
        <input type="text" id="username" name="username">
        <div id="usernameError" class="error"></div>
        <br>

        <label for="email">电子邮件:</label>
        <input type="email" id="email" name="email">
        <div id="emailError" class="error"></div>
        <br>

        <label for="password">密码:</label>
        <input type="password" id="password" name="password">
        <div id="passwordError" class="error"></div>
        <br>

        <label for="confirmPassword">确认密码:</label>
        <input type="password" id="confirmPassword" name="confirmPassword">
        <div id="confirmPasswordError" class="error"></div>
        <br>

        <input type="submit" value="注册">
    </form>
</body>
</html>

JavaScript 表单验证

现在,让我们创建 JavaScript 表单验证函数来验证这个注册表单。我们将验证用户名、电子邮件、密码和确认密码字段。

function validateForm() {
    var username = document.getElementById("username").value;
    var email = document.getElementById("email").value;
    var password = document.getElementById("password").value;
    var confirmPassword = document.getElementById("confirmPassword").value;

    var usernameError = document.getElementById("usernameError");
    var emailError = document.getElementById("emailError");
    var passwordError = document.getElementById("passwordError");
    var confirmPasswordError = document.getElementById("confirmPasswordError");

    // 隐藏所有错误消息
    usernameError.style.display = "none";
    emailError.style.display = "none";
    passwordError.style.display = "none";
    confirmPasswordError.style.display = "none";

    var isValid = true;

    if (username === "") {
        usernameError.style.display = "block";
        usernameError.innerHTML = "用户名不能为空";
        isValid = false;
    }

    if (email === "") {
        emailError.style.display = "block";
        emailError.innerHTML = "电子邮件不能为空";
        isValid = false;
    } else if (!validateEmail(email)) {
        emailError.style.display = "block";
        emailError.innerHTML = "电子邮件格式不正确";
        isValid = false;
    }

    if (password === "") {
        passwordError.style.display = "block";
        passwordError.innerHTML = "密码不能为空";
        isValid = false;
    } else if (password.length < 8) {
        passwordError.style.display = "block";
        passwordError.innerHTML = "密码长度不能少于8个字符";
        isValid = false;
    }

    if (confirmPassword === "") {
        confirmPasswordError.style.display = "block";
        confirmPasswordError.innerHTML = "确认密码不能为空";
        isValid = false;
    } else if (confirmPassword !== password) {
        confirmPasswordError.style.display = "block";
        confirmPasswordError.innerHTML = "密码不匹配";
        isValid = false;
    }

    return isValid;
}

function validateEmail(email) {
    var emailPattern = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/;
    return emailPattern.test(email);
}

这个 JavaScript 代码对用户注册表单进行了详尽的验证。它检查了用户名是否为空,电子邮件是否为空且符合正确的格式,密码是否足够强大(至少 8 个字符),以及确认密码是否与密码相匹配。如果任何一个验证失败,对应的错误消息会显示在页面上,阻止表单的提交。

结语

表单验证是网页开发中的一个重要主题,它有助于确保用户输入的数据的准确性和完整性。通过使用 JavaScript,我们可以创建强大的表单验证逻辑,提高用户体验,并确保数据的安全性。希望这篇文章能帮助初学者更好地理解和应用表单验证。如果您希望进一步深入研究,可以了解更多关于表单验证、正则表达式和前端开发的知识。祝您在网页开发中取得更大进步。

作者信息

作者 : 繁依Fanyi
CSDN: https://techfanyi.blog.csdn.net
掘金:https://juejin.cn/user/4154386571867191

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1112517.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ubuntu20.04运用startup application开机自启动python程序

运用startup application开机自启动python程序。在终端中输入gnome-session-properties,如果显示没有则先进行安装&#xff0c;sudo apt-get update 和sudo apt install StartupApplications(根据显示提示安装)。在显示程序中搜索startup&#xff0c;打开应用程序。 在程序目录…

LeetCode 1595. 连通两组点的最小成本【记忆化搜索,状压DP】2537

本文属于「征服LeetCode」系列文章之一&#xff0c;这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁&#xff0c;本系列将至少持续到刷完所有无锁题之日为止&#xff1b;由于LeetCode还在不断地创建新题&#xff0c;本系列的终止日期可能是永远。在这一系列刷题文章…

环形链表的约瑟夫问题

前言&#xff1a; 据说著名犹太历史学家Josephus有过如下故事&#xff1a; 在罗马人占领乔塔帕特后&#xff0c;39个犹太人和Josephus及他的朋友躲进一个洞里&#xff0c;39个犹太人决定宁愿死也不要被敌人抓到&#xff0c;于是决定了一个自杀方式&#xff0c;41个人排成一个…

24、Flink 的table api与sql之Catalogs(java api操作分区与函数、表)-4

Flink 系列文章 1、Flink 部署、概念介绍、source、transformation、sink使用示例、四大基石介绍和示例等系列综合文章链接 13、Flink 的table api与sql的基本概念、通用api介绍及入门示例 14、Flink 的table api与sql之数据类型: 内置数据类型以及它们的属性 15、Flink 的ta…

Unity3D 关于过大的UI帧动画如何处理详解

Unity3D是一款流行的游戏开发引擎&#xff0c;它可以用来创建各种类型的游戏&#xff0c;包括2D和3D游戏。在游戏中&#xff0c;UI帧动画是一个常见的元素&#xff0c;它可以增加游戏的交互性和视觉效果。然而&#xff0c;当UI帧动画过大时&#xff0c;可能会导致游戏的性能下降…

linux安装新版本git2、配置github-ssh。(centos、aws)

一、安装Git 1、yum默认版本git #1.安装git sudo yum install git -y #2.确认Git已经安装成功 git --version如果要安装较新版本&#xff0c;可以安装一个repo &#xff0c;但是我这第一次尝试失败了&#xff0c;执行完提示找不到git2u&#xff0c;ius repo也连不上。而且每次…

02HTML功能元素

1.功能元素 1.1.列表标签 ​ 列表标签的作用: 给一堆数据添加列表语义, 也就是告诉搜索引擎告诉浏览器这一堆数据是一个整体 - HTML中列表标签的分类 ​ 无序列表(最多)(unordered list) ​ 有序列表(最少)(ordered list) ​ 定义列表(其次)(definition list) 1.1.1.无序列…

解析Apache Kafka中的事务机制

这篇博客文章并不是关于使用事务细节的教程&#xff0c;我们也不会深入讨论设计细节。相反&#xff0c;我们将在适当的地方链接到JavaDocs或设计文档&#xff0c;以供希望深入研究的读者使用。 为什么交易? 我们在Kafka中设计的事务主要用于那些显示“读-进程-写”模式的应用…

基于SSM的传统文化网站

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;Vue 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是 目录…

Spring frame :基于 jdk 动态代理实现连接池复用

前言 在数据库开发中&#xff0c;连接池是一种重要的技术手段&#xff0c;它可以提高数据库连接的复用性和性能。连接池的原理是在应用启动时创建一定数量的数据库连接&#xff0c;并将这些连接保存在一个池中&#xff0c;应用程序需要数据库连接时&#xff0c;从连接池中获取…

静态路由与双线BFD热备份

✍ 路由具体是什么概念&#xff1f; ✍ 路由表和路由协议有什么关系&#xff1f; ✍ 电信联通双线如何做路由热备份&#xff1f; ---- 什么叫路由&#xff1f; ---- 路由器 - 网络设备 - 转发数据 - 要有一张地图 - 路由表 ---- 路由表 - 指明要到达某个目…

.NET开源且免费的Windows远程桌面管理软件

前言 今天要给大家推荐一款由.NET开源且免费的远程桌面管理软件&#xff1a;1Remote。 1Remote官方项目介绍 1Remote是一款现代的远程会话管理和启动器&#xff0c;它让你能够在任何时候快速开启一个远程会话。目前1Remote已支持 微软远程桌面(RDP)、VNC、SSH、Telnet、SFTP、…

Unity3D 游戏框架搭建的过程是什么详解

Unity3D 是一款广泛使用的游戏开发引擎&#xff0c;它提供了丰富的功能和工具&#xff0c;使得开发者可以轻松地创建高质量的游戏。在开始开发一个新的游戏项目之前&#xff0c;我们需要搭建一个游戏框架&#xff0c;这个框架将提供一些基本的功能和结构&#xff0c;为后续的开…

CRM自动化意味着什么?企业如何从中受益?

客户关系管理&#xff08;CRM&#xff09;软件不再仅仅适用于大公司或销售周期长的行业&#xff0c;它越来越成为各种规模企业的重要工具。 在日常工作中&#xff0c;当你陷入流程的所有细节时&#xff0c;可能会产生不必要的工作。因此&#xff0c;如果你想要CRM提供的组织和…

Python特征选择

1 特征选择的目的 机器学习中特征选择是一个重要步骤&#xff0c;以筛选出显著特征、摒弃非显著特征。这样做的作用是: 减少特征&#xff08;避免维度灾难&#xff09;&#xff0c;提高训练速度&#xff0c;降低运算开销&#xff1b; 减少干扰噪声&#xff0c;降低过拟合风险…

Leetcode 第 365 场周赛题解

Leetcode 第 365 场周赛题解 Leetcode 第 365 场周赛题解题目1&#xff1a;2873. 有序三元组中的最大值 I思路代码复杂度分析 题目2&#xff1a;2874. 有序三元组中的最大值 II思路代码复杂度分析思路2 题目3&#xff1a;2875. 无限数组的最短子数组思路代码复杂度分析 题目4&a…

Oracle的立场:官网更换首页与以色列站在一起

Oracle公司的官网&#xff0c;更换了首页内容&#xff0c;明确表明立场&#xff1a;Oracle与以色列站在一起。 声明指出&#xff1a; Oracle谴责针对以色列及其公民的恐怖袭击。Oracle将为其员工、以色列政府和国防机构提供一切必要的支持。 Magen David Adom是一家为以色列公民…

Java代码审计-因酷网校在线教育系统-越权漏洞分析

登录个人账号后&#xff0c;点击基本资料。有更新资料的功能。 查看这个页面的html源码&#xff0c;进行代码审计。&#xff08;这点怎么通过源码怎么找到的就不提了&#xff0c;写上实在啰嗦了。&#xff09; 代码jsp页面源码如下&#xff0c;查看这个表单信息 注意&#xf…

【Mysql】Mysql中的B+树索引

概述 从上一章节我们了解到InnoDB 的数据页都是由7个部分组成&#xff0c;然后各个数据页之间可以组成一个双向链表 &#xff0c;而每个数据页中的记录会按照主键值从小到大的顺序组成一个单向链表 &#xff0c;每个数据页都会为存储在它里边儿的记录生成一个页目录 &#xff…

【AIGC核心技术剖析】大型语言和视觉助手——LLaVA(论文+源码)

🔥 [新!LLaVA-1.5 在 11 个基准测试上实现了 SoTA,只需对原始 LLaVA 进行简单的修改,利用所有公共数据,在单个 1-A8 节点上在 ~100 天内完成训练,并超越使用数十亿级数据的方法。 LLaVA代表了一种新颖的端到端训练大型多模态模型,结合了视觉编码器和骆马 对于通用的视…