前端小案例——登录界面(正则验证, 附源码)

一、前言

实现功能:

  1. 提供用户名和密码输入框。
  2. 当用户提交表单时,阻止默认提交行为。
  3. 使用正则表达式验证用户输入的内容,判断输入的是有效的邮箱地址还是身份证号码。
  4. 根据验证结果,在输入框下方显示相应的提示信息。

实现逻辑:

  1. 当页面加载完成后,通过 document.addEventListener("DOMContentLoaded", function () { ... }); 来监听 DOMContentLoaded 事件,确保页面中的所有元素都已加载完毕。

  2. 获取表单元素 .form 并监听其提交事件 form.addEventListener("submit", function (event) { ... });

  3. 在表单提交事件中,首先阻止默认的表单提交行为 event.preventDefault();,以便在验证用户输入后自行处理提交逻辑。

  4. 获取用户名输入框元素 userinput 和用于显示验证信息的元素 eer

  5. 定义了两个正则表达式:emailRegex 用于验证邮箱地址,idCardRegex 用于验证身份证号码。

  6. 判断用户输入的内容是否符合邮箱地址或身份证号码的格式:

    • 如果是有效的邮箱地址,则在 eer 元素中显示 "有效的邮箱地址"。
    • 如果是有效的身份证号码,则在 eer 元素中显示 "有效的身份证号码"。
    • 如果都不符合,则在 eer 元素中显示 "请输入有效的邮箱地址或身份证号码"。
  7. 最后,根据验证结果,在页面上显示相应的提示信息。

二、项目运行效果

三、全部代码

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>登录</title><style>.form {max-width: 350px;display: flex;flex-direction: column;gap: 20px;padding-left: 2em;padding-right: 2em;padding-bottom: 0.4em;background-color: rgb(249, 196, 196);border-radius: 25px;transition: .4s ease-in-out;margin: 200px auto;}#heading {text-align: center;margin: 2em;color: rgb(255, 255, 255);font-size: 1.2em;}.field {display: flex;align-items: center;justify-content: center;gap: 0.5em;border-radius: 25px;padding: 0.6em;border: none;outline: none;color: white;background-color: #383737;box-shadow: inset 2px 5px 10px rgb(5, 5, 5);}.input-icon {height: 1.3em;width: 1.3em;fill: white;}.input-field {background: none;border: none;outline: none;width: 100%;height: 30px;color: #d3d3d3;}.form .btn {display: flex;justify-content: center;flex-direction: row;margin-top: 2.5em;padding-bottom: 50px;}.button1 {padding: 0.5em;padding-left: 1.1em;padding-right: 1.1em;border-radius: 5px;margin-right: 0.5em;border: none;outline: none;transition: .4s ease-in-out;background-color: #252525;color: white;}.button1:hover {background-color: black;color: white;}.button2 {padding: 0.5em;padding-left: 2.3em;padding-right: 2.3em;border-radius: 5px;border: none;outline: none;transition: .4s ease-in-out;background-color: #252525;color: white;}.button2:hover {background-color: black;color: white;}.button3 {margin-bottom: 3em;padding: 0.5em;border-radius: 5px;border: none;outline: none;transition: .4s ease-in-out;background-color: #252525;color: white;}.eer{margin-top: -18px;margin-left: 20px;width: 80%;height: 20px;border: none;background-color: transparent; color: #333;}</style>
</head>
<body><form class="form"><p id="heading">Login</p><div class="field"><svg class="input-icon" xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor"viewBox="0 0 16 16"><pathd="M13.106 7.222c0-2.967-2.249-5.032-5.482-5.032-3.35 0-5.646 2.318-5.646 5.702 0 3.493 2.235 5.708 5.762 5.708.862 0 1.689-.123 2.304-.335v-.862c-.43.199-1.354.328-2.29.328-2.926 0-4.813-1.88-4.813-4.798 0-2.844 1.921-4.881 4.594-4.881 2.735 0 4.608 1.688 4.608 4.156 0 1.682-.554 2.769-1.416 2.769-.492 0-.772-.28-.772-.76V5.206H8.923v.834h-.11c-.266-.595-.881-.964-1.6-.964-1.4 0-2.378 1.162-2.378 2.823 0 1.737.957 2.906 2.379 2.906.8 0 1.415-.39 1.709-1.087h.11c.081.67.703 1.148 1.503 1.148 1.572 0 2.57-1.415 2.57-3.643zm-7.177.704c0-1.197.54-1.907 1.456-1.907.93 0 1.524.738 1.524 1.907S8.308 9.84 7.371 9.84c-.895 0-1.442-.725-1.442-1.914z"></path></svg><input placeholder="Username" class="input-field" id="user" type="text" ></div><input type="text" class="eer" disabled value=""><div class="field"><svg class="input-icon" xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor"viewBox="0 0 16 16"><pathd="M8 1a2 2 0 0 1 2 2v4H6V3a2 2 0 0 1 2-2zm3 6V3a3 3 0 0 0-6 0v4a2 2 0 0 0-2 2v5a2 2 0 0 0 2 2h6a2 2 0 0 0 2-2V9a2 2 0 0 0-2-2z"></path></svg><input placeholder="Password" class="input-field" type="password" ></div><div class="btn"><button class="button1">Login</button><button class="button2">Sign Up</button></div></form>
</body>
<script>document.addEventListener("DOMContentLoaded", function () {const form = document.querySelector(".form");form.addEventListener("submit", function (event) {event.preventDefault(); // 阻止表单默认提交行为const userinput = document.querySelector("#user");const value = userinput.value;const eer = document.querySelector('.eer');console.log(eer);// 电子邮件正则表达式const emailRegex = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,6}$/;// 身份证号码正则表达式const idCardRegex = /^[1-9]\d{5}(18|19|20)?\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}(\d|X)$/i;if (emailRegex.test(value)) {eer.value = '有效的邮箱地址';} else if (idCardRegex.test(value)) {eer.value = '有效的身份证号码';} else {// userinput.value = "";eer.value  = "请输入有效的邮箱地址或身份证号码";}});});
</script>
</html>

四、答疑解惑

 这是一个非常适合前端入门练习的小案例,各位小伙伴可以自行更改样式和内容,如果大家运行时出现问题或代码有什么不懂的地方都可以随时评论留言或联系博主QQ。

        还多请各位小伙伴多多点赞支持,你们的支持是我最大的动力。

博主QQ:1196094293

谢谢各位的支持~~

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue3 图片/视频 加载失败重试

vue3 图片/视频 加载失败重试 需求背景 用户手机上传图片走oss &#xff0c;在pc端在线客服连接socket 需要实时推送消息&#xff0c;接受到消息后&#xff0c;由于oss还回没有回调成功&#xff0c;所以图片/视频不能及时展示&#xff0c;所以做了一个失败重试的功能 效果图 技…

千帆AppBuilder使用指南-创建应用

概述 百度智能云千帆AppBuilder使用指南&#xff08;以下简称为AppBuilder&#xff09;提供了多个预置应用框架的零代码创建能力或代码态开发能力&#xff0c;降低AI原生应用开发门槛。 1、知识问答应用&#xff08;RAG框架&#xff09; 高效的大模型知识检索增强框架&#…

二分以及练习题目

二分模板 判断是否可以二分 &#xff08;1&#xff09;单调性 备选答案集是有序的 &#xff08;2&#xff09;二段性 在检查了mid是否符合要求之和&#xff0c;我可以舍弃左右某一边的答案 两个模板 关键词&#xff1a;满足条件的最小值&#xff0c;最大值最小&#xff0…

掌握 MySQL 的数据类型

知道了表是由不同数据类型的列组成的&#xff0c;然后填充了一行一行的数据。 当我们要创建表的时候&#xff0c;就要根据业务需求&#xff0c;选择合适的数据类型。比如在实战项目中&#xff0c;文章表就是由下面这些不同数据类型的字段定义的。 目前用到了 bigint、tinyint、…

Vue基础篇

Vue Vue是一套用于构建用户界面的渐进式JavaScript框架 什么是渐进式? Vue可以自底向上逐层地应用; 当构建简单应用时, 只需一个轻量小巧的核心库; 当构建复杂应用时, 可以引入各式各样的Vue插件 Vue具有以下特点: 采用组件化模式, 提高代码复用率且让代码更好维护 声明式编…

CSS全局样式的设置,JavaScript运算符

面试题&#xff1a; Html 1&#xff0c;html语义化 2&#xff0c;meta viewport相关 3&#xff0c;canvas 相关 CSS 1&#xff0c;盒模型 1.1&#xff0c;ie盒模型算上border、padding及自身&#xff08;不算margin&#xff09;&#xff0c;标准的只算上自身窗体的大小 c…

爬虫案例一

首先我举一个案例比如豆瓣电影排行榜 (douban.com)这个电影&#xff0c;首先我们进去检查源代码 说明源代码有&#xff0c;说明是服务器渲染&#xff0c;可以直接那html 但是返回的结果是空&#xff0c;所以我们需要在头里面加上User-Agent 然后可以看到有返回的结果&#xff0…

Java递归生成本地文件目录树形结构

Java递归生成本地文件目录(树行结构) 1.读取txt文件保存的文件目录结构 2.递归生成本地文件目录树形结构&#xff0c;并修改目录文件前缀进行递增 3.结果截图 4.代码 package com.zfi.server.device;import io.swagger.annotations.Api; import org.springframework.web.bind…

【kubernetes】关于k8s集群的存储卷

目录 一、存储卷的分类 二、empty存储卷以及特点 三、hostpath存储卷以及特点 四、nfs存储卷以及特点 五、pvc存储卷 查看pv的定义 查看pvc的定义 实操&#xff1a;静态创建pv的方式 实现pvc存储卷 步骤一&#xff1a;先完成nfs的目录共享&#xff0c;需要准备不同的目…

JavaScript的`call`方法:实现函数间的调用!

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

plc远程锁机网关,远程锁机与防拆功能双重保障

在设备租赁和分期购买领域&#xff0c;如何确保设备的安全与资金的回收一直是各大厂家和卖家关注的重点。传统的锁机方式往往需要人工介入&#xff0c;不仅效率低下&#xff0c;而且成本高昂。如今&#xff0c;借助HiWoo Box的远程锁机功能&#xff0c;这些问题将迎刃而解。 什…

蓝海资讯|网红老阳推荐的视频号带货项目怎么样?

在当今社会&#xff0c;随着互联网的快速发展&#xff0c;网红经济已经成为一个热门的话题。在这个背景下&#xff0c;许多人都想通过加入网红行业来实现自己的财富自由。其中&#xff0c;网红老阳推荐的视频号带货项目引起了广泛关注。但是&#xff0c;这个项目是否真的如想象…