暑期学JavaScript【第六天】

news2024/11/28 10:58:11

一、正则表达式

  1. 边界符
    ^:表示以后面字符开头
    $:表示以前方字符结尾
  2. 量词
    *:前面的字符至少出现0次
    +:前面的字符至少出现1次
    ?:前面的字符出现0/1次
    {n}:重复n次
    {n,}:至少重复n次
    {n,m}:重复n~m次
  3. 字符类
  • [ ]:代表字符集合
/^[a-z]$/
  • [ ^ ] 取反
[^a-z]匹配除a-z的字符
  1. 预定义类
    在这里插入图片描述
  2. 修饰符
    i:忽略大小写
    g:全部匹配
/^abc/i.test('Abc')	//true
/^abc/g.test('abc123abc')	//全部匹配
str = 'abc123Abc'
str.replace(/abc/ig,'哈哈')
//哈哈123哈哈,返回新字符串

二、正则的使用

const regex = /^abc$/
regex.test('abc')
regex.exex('abcdefgabc')	// 返回一个数组

登录案例

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <link rel="stylesheet" type="text/css" href="login.css">
</head>

<body>
    <div class="box">
        <div class="nav">
            <a href="javascript:;" class="active">账户登录</a>
            |
            <a href="javascript:;">二维码登录</a>
        </div>
        <form class="user-login">
            <p>手机验证码登录</p>
            <div class="input">
                <span>🐷</span>
                <input type="text" placeholder="请输入用户名称">
            </div>
            <div class="input">
                <span>🔒</span>
                <input type="password" placeholder="请输入密码">
            </div>
            <div class="agree">
                <input type="checkbox">
                我已同意《<a href="#">服务条款</a>》和《<a href="#">服务条款</a></div>
            <button class="login">
                登录
            </button>
            <div class="footer">
                <a href="#">忘记密码?</a>
                <a href="#">免费注册</a>
            </div>
        </form>
        <div class="code-login">
            <img src="./JS基础/WebAPI/images/desktop_2.jpg" alt="">
            <p>请使用手机扫描二维码登录</p>
        </div>
    </div>
</body>
<script>

    const form = document.querySelector('form')
    const usrL = document.querySelector('.nav a:nth-child(1)')
    const code = document.querySelector('.nav a:nth-child(2)')
    const nav = document.querySelector('.nav')
    const usrlog = document.querySelector('.user-login')
    const codelog = document.querySelector('.code-login')
    form.addEventListener('submit', function (e) {
        const usr = document.querySelectorAll('.input input')
        const agree = document.querySelector('.agree input:nth-child(1)')
        // const regex = /^\w+$  | ^\d{11}$/
        const regex = /^\w+$/
        if (!(regex.test(usr[0].value) && usr[1].value !== '' )){
            console.log(usr[0].value);
            e.preventDefault()
            return alert('请完善账号密码!')
        }
        if(!agree.checked){
            e.preventDefault()
            return alert('请勾选同意')
        }
        alert('登录成功!')
        form.reset()
    })
    nav.addEventListener('click',function(e){
        if(e.target === usrL){
            document.querySelector('.active').classList.remove('active')
            usrL.classList.add('active')
            codelog.style.display = 'none'
            usrlog.style.display = 'block'
        }
        if(e.target === code){
            document.querySelector('.active').classList.remove('active')
            code.classList.add('active')
            codelog.style.display = 'block'
            usrlog.style.display = 'none'
        }
    })
</script>

</html>

* {
    margin: 0 auto;
    padding: 0 auto;
}
body {
    background-color: #ddd;
}
.box {
    width: 300px;
    height: 320px;
    padding: 20px 35px;
    background-color: #fff;
    text-align: center;
    margin-top: 100px;
    color: #CFCDCD;
}

a {
    text-decoration: none;
}
.nav {
    width: 100%;
    height: 50px;
    color: black;
    position: relative;
}
.nav a {
    padding-bottom: 5px;
    color: black;
    font-size: 20px;
}
.nav a:nth-child(1) {
    position: absolute;
    left: 0px;
}
.nav a:nth-child(2) {
    position: absolute;
    right: 0px;
}
.user-login {
    width: 100%;
}
.user-login p {
    text-align: right;
    color: #5fa094;
    cursor: pointer;
}
.code-login {
    display: none;
}
.login {
    width: 100%;
    height: 50px;
    background-color: #43b99a;
    color: white;
    line-height: 50px;
    border: #fff;
    cursor: pointer;
}

.input {
    border: 1px solid #17bb9b;
    width: 100%;
    height: 36px;
    margin-top: 17px;
    display: flex;
    background: #CFCDCD;

}
.input input {
    flex: 1;
    padding-left: 15px;
    background: #fff;
    outline: none;
    border: none;
}
.input span {
  width: 34px;
  height: 34px;
  text-align: center;
  line-height: 34px;
  font-size: 20px;
}
.agree {
    width: 100%;
    text-align: left;
    margin: 20px 0;
}
.agree a {
    color: #56606b;
}
.footer {
    margin-top: 10px;
    position: relative;
}
.footer a:nth-child(1){
    position: absolute;
    left: 0;
    color: black;
}
.footer a:nth-child(2){
    position: absolute;
    right: 0;
    color: black;
}
.active {
    border-bottom: 2px solid #17bb9b;
}
.code-login {
    width: 300px;
    height: 200px;
}
.code-login img {
    width: 100%;
    height: 100%;
    margin-bottom: 20px;
}

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

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

相关文章

leetcode 257. 二叉树的所有路径

2023.7.5 这题需要用到递归回溯&#xff0c;也是我第一次接触回溯这个概念。 大致思路是&#xff1a; 在reversal函数中&#xff0c;首先将当前节点的值加入到路径path中。然后判断当前节点是否为叶子节点&#xff0c;即没有左右子节点。如果是叶子节点&#xff0c;将路径转化…

nnUNet保姆级使用教程!从环境配置到训练与推理(新手必看)

文章目录 写在前面nnUNet是什么&#xff1f;一、配置虚拟环境二、安装nnUNet框架1.安装nnUNet这一步我遇到的两个问题&#xff1a; 2.安装隐藏层hiddenlayer&#xff08;可选&#xff09; 三、数据集准备nnUNet对于你要训练的数据是有严格要求的&#xff0c;这第一点就体现在我…

apple pencil值不值得购买?ipad可以用的手写笔推荐

现在市面的电容笔品牌鱼龙混杂&#xff0c;我们很在选购中很容易就踩坑&#xff0c;例如买到一些书写会频繁出现断触的&#xff0c;或者防误触功能会失灵。所以我们在选购中务必要擦亮双眼。而对于一些将ipad作为一种学习工具的人而言&#xff0c;电容笔已经是iPad中不可或缺的…

【C++】vector基本用法介绍

vector简单介绍 前言vector原型vector常用函数接口介绍vector的构造、析构、赋值构造析构 修改类的函数push_backinsertfind 函数 eraseswap 关于容量的函数max_sizesort vector\<char\> 和 string的区别vector\<数据类型\> 结束 前言 首先&#xff0c;vector的用…

vue watch

Vue.js已在全球开发人员中广受欢迎&#xff0c;这归功于其灵活的响应式系统和丰富的开发工具。本文将深入解析Vue中的Watch特性&#xff0c;我们将了解其功能&#xff0c;适用的实际例子&#xff0c;以及可能遇到的常见错误及其解决方案。 第一部分&#xff1a;Vue的Watch特性…

开放式耳机漏音有多大?开放式耳机和封闭式耳机哪个音质好?

什么是开放式耳机 从名字上理解就是开放样式的耳机&#xff0c;其实也确实如此&#xff0c;开放式耳机是不需要封闭耳道来传输声音&#xff0c;主要是通过耳骨振动传递或者声波震动耳膜&#xff0c;两者声音传递的方式都不用完全封闭耳道&#xff0c;可以让耳道对外界放开&…

【软件测试】如何梳理你测试的业务

目录 前言&#xff1a; 一、为什么要梳理业务&#xff1f; 二、梳理框架 1. 测试场景 2. 业务 3. 系统 4. 数据 5. 安全 6. 性能 7. 数据分析 8. 监控报警 9. 应急预案 前言&#xff1a; 在进行软件测试之前&#xff0c;合理和清晰地梳理测试的业务是非常重要的&a…

linux运维常用命令(持续更新)

目录 一&#xff1a; 查看指定端口是否被监听 二&#xff1a;查看某个端口/服务相关进程 三&#xff1a;在B机器查看是否可以访问A机器某个端口,查看端口是否开放 四&#xff1a;查看端口占用列表 五&#xff1a;查看端口占用情况 六&#xff1a;查看哪些进程监听了2181端…

了解PHP-入门-环境搭建-集成环境安装

PHP是一种创建动态交互性站点的强有力的服务器端脚本语言&#xff0c; PHP文件通常包含 HTML标签和一些 PHP脚本代码 Hypertext Preprocessor&#xff0c;超文本预处理器。是一种免费开源服务器端脚本语言&#xff0c;默认文件扩展名是 .php &#xff0c;可以嵌入到网页代码中&…

怎么学习PHP的文件上传和图像处理技术? - 易智编译EaseEditing

学习PHP的文件上传和图像处理技术可以按照以下步骤进行&#xff1a; 掌握基础知识&#xff1a; 了解PHP的基本语法和文件操作函数。熟悉文件上传的相关概念和流程。 学习文件上传&#xff1a; 学习如何在PHP中实现文件上传功能。了解表单的 enctype 属性、文件上传限制、文件…

防爆温湿度传感器:保障工业安全环境的关键设备

在现代工业生产过程中&#xff0c;安全是一项至关重要的考虑因素。特别是在危险和爆炸性环境中&#xff0c;保障人员和设备的安全更是至关重要。为了解决这一问题&#xff0c;防爆温湿度传感器应运而生。本文将详细介绍防爆温湿度传感器的工作原理、应用范围以及其在工业安全环…

伦敦银比起期货交易有哪些优势?

伦敦银交易属于现货交易&#xff0c;因此一般不受带交易时间、地点的限制&#xff0c;交易方式灵活方便&#xff0c;随机性强&#xff0c;投资者可以在任何场所与对手进行交易。相比之下&#xff0c;白银期货必须在交易所内依照法规进行公开、集中交易&#xff0c;不能进行场外…

Huawei Auth-Http Server 1.0 passwd文件泄露漏洞

先用fofa脚本爬取所有碧海威相关资产&#xff08;fofa脚本下载地址&#xff1a;&#xff09; python3 fofa-cwillchris.py -k body"umweb/u20.png" 将上面爬取到的文件&#xff08;一般是final****.txt&#xff09;移动到脚本目录下&#xff0c;保存为1.txt ./Huaw…

Redis实战——商户查询(一)

商户查询 缓存(Cache)&#xff1a;就是数据交换的缓冲区&#xff0c;俗称的缓存就是缓冲区内的数据&#xff0c;缓存数据在内存中&#xff0c;内存的读写性能完全高于磁盘&#xff0c;使用缓存可以大大降低用户访问并发量带来的服务器读写压力。当数据量较大时&#xff0c;如果…

rocketMq消息队列原生api使用以及rocketMq整合springboot

rocketMq消息队列 文章目录 rocketMq消息队列一、RocketMQ原生API使用1、测试环境搭建2、RocketMQ的编程模型3、RocketMQ的消息样例3.1 基本样例3.2 顺序消息3.3 广播消息3.4 延迟消息3.5 批量消息3.6 过滤消息3.7 事务消息3.8 ACL权限控制 二、SpringBoot整合RocketMQ1、快速实…

PLC工程师到C#上位机开发:成功转型的故事

从自动化PLC工程师转变为C#上位机开发工程师&#xff01;这是一个很大的转变&#xff0c;但是您的自动化背景将为您提供宝贵的经验和技能。刚好&#xff0c;我这里有上位机入门&#xff0c;学习线路图&#xff0c;各种项目&#xff0c;需要留个6。 在成功转变的过程中&#xf…

7.3.3 【Linux】磁盘格式化(创建文件系统)

XFS 文件系统 mkfs.xfs 我们常听到的“格式化”其实应该称为“创建文件系统 &#xff08;make filesystem&#xff09;”&#xff0c;使用的是mkfs&#xff0c;创建的是xfs文件系统&#xff0c;使用的是mkfs.xfs这个指令。这个指令这样用&#xff1a; 使用默认的xfs文件系统参…

速通协程,一步到位!

前言 协程的概念最核心的点就是一段程序能够被挂起&#xff0c;稍后在挂起的位置恢复&#xff0c;挂起和恢复是由使用者控制的。 数学模型 在一个线程的视角中&#xff0c;我们的程序是按照顺序来执行的&#xff0c;假设我们使用??????来描述一段程序的所有指令。那么…

elk中logstash的使用

1.前言 logstash是一个相对较重的日志收集器&#xff0c;可以通过多种方式获取到日志数据&#xff0c;如tcp、日志文件、kafka、redis、rabbitmq等方式&#xff0c;还可以使用filter去过滤日志、转换日志为json格式&#xff0c;所以logstash是一个功能强大的日志收集器&#x…

MFC项目添加外部头文件和源文件后编译出现C1010错误

出现这个问题的主要原因是如果使用VC向生成工程的话&#xff0c;默认使用预编译头文件“stdafx.h”&#xff0c;这样做的目的是为了加快编译速度。 如果加入第三方c/cpp文件没有#include “stdafx.h” &#xff0c;就会报此错误。 在<解决方案管理器中>(就是可以看到工程…