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

一、前言

实现功能:

  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.mzph.cn/news/722408.shtml

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

相关文章

ZYNQ--PS_PL交互(AXI_HP)

AXI_HP接口 通过AXI_HP接口,可直接通过AXI_FULL协议向DDR中通过DMA传输数据。 BD设计 AXI_HP接口设置 AXI_Master代码 module axi_full_master #(parameter C_M_TARGET_SLAVE_BASE_ADDR = 32h40000000,parameter integer C_M_AXI_BURST_LEN = 16,parameter integer …

DiskMirror-spring-boot-starter 技术|

DiskMirror-spring-boot-starter 技术 diskMirror 实现了 SpringBoot 的 starter 能够集成到 SpringBoot 中。 DiskMirror 的 starter&#xff0c;通过引入此类&#xff0c;可以直接实现 diskMirror 在 SpringBoot 中的自动配置&#xff0c;接下来我们将使用案例逐步的演示 d…

[202403]xavier nx環境配置流程記錄

xavier nx環境配置流程記錄 引言1.板子環境2.設置默認python和pip2.安裝torch和torchvision2.1 下載正確的whl安裝文件2.2 開始安裝2.3 查看torch安裝情況 3.問題記錄3.1 問題1&#xff1a;Running pip as the root user can result in broken permissions3.2 問題2&#xff1a…

Java Web(八)--Servlet(三)

会话技术 为什么需要&#xff1f; 每个用户在使用浏览器与服务器进行会话的过程中&#xff0c;不可避免各自会产生一些数据&#xff0c;服务器要想办法为每个用户保存这些数据&#xff1b; 用户通过浏览器访问 Web 应用时&#xff0c;服务器都需要保存和跟踪用户的状态&…

外部存储空间

1. 存储在外部 私有 存储空间 /storage/emulated/0/Android/data/com.tiger.chapter06/files/Download/1709636015824.txt package com.tiger.chapter06;import android.os.Bundle; import android.os.Environment; import android.util.Log; import android.view.View; impo…

linux kernel物理内存概述(六)

目录 伙伴系统 1、什么是伙伴&#xff1f; 2、伙伴系统的分配原理 3、伙伴系统回收 伙伴系统 1、什么是伙伴&#xff1f; 伙伴必须是大小相同并且在物理上连续的两个或者多个页。 2、伙伴系统的分配原理 首先根据内存分配接口函数gfp_t gfp_mask&#xff0c;找到内存分…

分布式事务Seata

分布式事务与Seata落地 一、事务基础 1.1 本地事务 事务指的就是一个操作单元&#xff0c;在这个操作单元中的所有操作最终要保持一致的行为&#xff0c;要么所有操作都成功&#xff0c;要么所有的操作都被撤销。 1.2 本地事务特性 本地事务四大特性: ACID A&#xff1a;原…

SuperPoint和SuperGlue 的算法介绍及学习应用经验分享

SuperPoint和SuperGlue 的算法介绍及学习应用经验分享 2024年01月03日 10:38186浏览 3喜欢 0评论 视频地址&#xff1a; SuperPoint和SuperGlue 的算法介绍及学习应用经验分享 好想 特征点匹配&#xff0c;为了计算位姿 特征点&#xff1a;关键点描述子&#xff08…

第五十回 插翅虎枷打白秀英 美髯公误失小衙内-mayfly-go:web 版 linux、数据库等管理平台

晁盖宋江和吴用到山下迎接雷横上山&#xff0c;宋江邀请雷横入伙&#xff0c;雷横以母亲年事已高为由拒绝了。 雷横回到郓城&#xff0c;听李小二说从东京新来了个表演的叫白秀英&#xff0c;吹拉弹唱跳&#xff0c;样样精通&#xff0c;于是雷横和李小二一起到戏院去看演出。…

Python爬虫实战第三例【三】(下)

零.前情提要&#xff1a; 没有看上一章的小伙伴&#xff0c;建议先去看上一章&#xff0c;避免有些知识点不连贯 地址&#xff1a;Python爬虫实战第三例【三】【上】-CSDN博客 在上一章&#xff0c;我们经过分析.m3u8文件和.ts文件后&#xff0c;成功爬取到了所有.ts文件的文…

冒泡经典题

&#x1f4d1;前言 本文主要是【】——简单使用的文章&#xff0c;如果有什么需要改进的地方还请大佬指出⛺️ &#x1f3ac;作者简介&#xff1a;大家好&#xff0c;我是听风与他&#x1f947; ☁️博客首页&#xff1a;CSDN主页听风与他 &#x1f304;每日一句&#xff1a;狠…

RN开发搬砖经验之-Android平台下处理后退按钮事件

基本接口 利用RN 针对Android平台提供的接口 BackHandler BackHandler需要区分类组件跟函数组件的场景&#xff0c;主要是两个组件一个基于组件生命周期的&#xff0c;一个是基于hook的&#xff0c;即注册BackHandler的事件监听与移除时机写法不同。 类组件 示例代码 impor…

使用J-Link | OPENSDA 调试S32K144开发板

一、S32DS下载 使用的开发软件为S32DS&#xff0c;可以到NXP官网下载&#xff1a;链接&#xff0c;也可以通过网盘&#xff1a;链接 二、对S32K144开发板进行调试 调试方法一&#xff1a; S32K144开发板自带一个OPENSDA MCU&#xff0c;我们可以通过一根Mircro USB线连接到电…

计算机网络-第3章 数据链路层

主要内容&#xff1a;两个信道及对应的协议&#xff1a;点对点信道和广播信道&#xff0c;扩展以太网和高速以太网 本章的分组转发为局域网内的转发&#xff0c;不经过路由&#xff0c;网络层分组转为为网络与网络之间的转发&#xff0c;经过路由。局域网属于网络链路层的范围…

springboot3.x 以上,官方不建议使用spring.factories

springboot2.7.x 以上,官方不建议使用spring.factories 最近公司项目升级.需要将springcloud/springboot版本升级到2.7.x以上,再升级的过程中遇到了太多的问题.总结在了如下文章中: springboot艰难版本升级之路!! springboot 2.3.x版本升级到2.7.x版本 这篇文章就重点是梳理一…

LeetCode 热题 100 (尽量ACM模式刷) 持续更新!!!

LeetCode 热题 100 哈希hash 1 两数之和 /** 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出和为目标值target的那两个整数&#xff0c;并返回它们的数组下标。* 你可以假设每种输入只会对应一个答案。但是&#xff0c;数组中同一个元素在答案…

品优购首页制作

一&#xff0c;常用模块类名命名 二&#xff0c;快捷导航shortcut制作 三&#xff0c;header制作 3.1LOGO SEO优化 3.2 搜索模块定位 四&#xff0c; nav导航制作 五&#xff0c;footer底部制作 六&#xff0c;main主体模块制作 以前书写是模块化中的公共部分 main主体模块是…

MyBatis介绍

MyBatis是一个优秀的持久层框架&#xff08;就是将某些数据持久化到硬盘或其他存储器中的框架&#xff09;&#xff0c;它把jdbc对数据库的操作进行了封装&#xff0c;使用户只需关注sql本身&#xff0c;不需要去执行jdbc的那一套复杂的操作。 MyBatis通过配置xml文件或注解的方…

Linux安全加固功能

提示:工具下载链接在文章最后 目录 一.加固功能介绍二.配置加固功能1.配置安全加固功能1.1 开放目前设备监听的所有端口1.2 只开放80、443、20、21、22端口1.3 防火墙配置工具1.3.1 开放允许访问的端口1.3.2 删除允许访问的端口1.3.3 添加IP地址允许访问规则1.3.4 添加IP地址禁…

漫画手绘视频教程分享

下载地址&#xff1a; 漫画手绘教程: https://url83.ctfile.com/d/45573183-60305653-039aed?p7526 (访问密码: 7526)