day06 - Web APIs

学习目标:

能够利用正则表达式校验输入信息的合法性

具备利用正则表达式验证小兔鲜注册页面表单的能力

1. 正则表达式

1.1 介绍
  • 正则表达式(Regular Expression)是用于匹配字符串中字符组合的模式。在 JavaScript中,正则表达式也是对象

  • 通常用来查找、替换那些符合正则表达式的文本,许多语言都支持正则表达式

  • 请在上图中找出【大波浪戴帽子的女孩子】

  • 大波浪、戴帽子、女孩子都是描述信息,通过这些信息能够在人群中查找到确定的某个人,那么这些用于查找的描述信息编写一个模式,对应到计算机中就是所谓的正则表达式

  • 正则表达式在 JavaScript中的使用场景:

    • 例如验证表单:用户名表单只能输入英文字母、数字或者下划线, 昵称输入框中可以输入中文(匹配)

      • 比如用户名: /^[a-z0-9_-]{3,16}$/

    • 过滤掉页面内容中的一些敏感词(替换),或从字符串中获取我们想要的特定部分(提取)等

总结:

  • 正则表达式是什么?

    • 是用于匹配字符串中字符组合的模式

  • 正则表达式有什么作用?

    • 表单验证(匹配)

    • 过滤敏感词(替换)

    • 字符串中提取我们想要的部分(提取)

1.2 语法
1.2.1 创建正则表达式

我们想要查找是否有戴眼镜的人, 怎么做呢?

  1. 定义规则: 戴眼镜的

  2. 根据规则去查找:找到则返回

正则同样道理,我们分为两步

  1. 定义规则

  2. 查找

比如:查找下面文本中是否包含字符串 '玫瑰花'

const str = '玫瑰花,郁金香,梅花,百合花,粉色玫瑰花'

JavaScript 中定义正则表达式的语法有两种,我们先学习其中比较简单的方法:

  • 定义正则表达式语法:

    const 变量名 = /表达式/

    其中,/ / 是正则表达式字面量

  • 比如:

    const reg = /玫瑰花/
1.2.2 判断是否有符合规则的字符串

test() 方法 用来查看正则表达式与指定的字符串是否匹配

  • 语法:

    regObj.test(被监测的字符串)
  • 比如:

    // 要监测的字符串
    const str = '玫瑰花,郁金香,梅花,百合花,粉色玫瑰花'
    // 1. 定义正则表达式,监测规则
    const reg = /玫瑰花/
    // 2. 检测方法
    console.log(reg.test(str)) // true
  • 如果正则表达式与指定的字符串匹配 ,返回true,否则false

总结:

  • 正则表达式使用分为几步?

1.2.3 检索(查找)符合规则的字符串

exec() 方法,在一个指定字符串中执行一个搜索匹配

  • 语法:

    regObj.exec(被检测字符串)
  • 比如:

    // 要检测的字符串
    const str = '玫瑰花,郁金香,梅花,百合花,粉色玫瑰花'
    // 1. 定义正则表达式,检测规则
    const reg = /玫瑰花/
    // 2. 检测方法
    console.log(reg.exec(str))

  • 如果匹配成功,exec() 方法返回一个数组,否则返回null

1.2.4 总结

正则表达式检测查找 test()方法和exec()方法有什么区别?

  • test方法 用于判断是否有符合规则的字符串,返回的是布尔值 找到返回true,否则false

  • exec方法用于检索(查找)符合规则的字符串,找到返回数组,否则为 null

1.3 元字符
1.3.1 元字符概念
  • 普通字符:

    大多数的字符仅能够描述它们本身,这些字符称作普通字符,例如所有的字母和数字。也就是说普通字符只能够匹配字符串中与它们相同的字符。

  • 元字符(特殊字符)

    是一些具有特殊含义的字符,可以极大提高了灵活性和强大的匹配功能。

    • 比如,规定用户只能输入英文26个英文字母,普通字符的话 abcdefghijklm…..

    • 但是换成元字符写法: [a-z]

  • 参考文档:

1.3.2 元字符 - 边界符

边界符(表示位置,开头和结尾,必须用什么开头,用什么结尾)

正则表达式中的边界符(位置符)用来提示字符所处的位置,主要有两个字符

边界符说明
^表示匹配行首的文本(以谁开始)
$表示匹配行尾的文本(以谁结束)

如果 ^ 和 $ 在一起,表示必须是精确匹配。

例如:

示例代码:

// // 1. 边界符
console.log(/^哈/.test('哈')) // true
console.log(/^哈/.test('哈哈')) // true
console.log(/^哈/.test('二哈')) // flase
console.log(/^哈$/.test('哈')) // true  只有这种情况为true 否则全是false
console.log(/^哈$/.test('哈哈')) // false
console.log(/^哈$/.test('二哈')) // false

1.3.2 元字符 - 量词 (表示重复次数)

量词用来 设定某个模式出现的次数

量词说明
*重复零次或更多次
+重复一次或更多次
?重复零次或一次
{n}重复n次
{n,}重复n次或更多次
{n,m}重复n到m次

注意: 逗号左右两侧千万不要出现空格

例如:

总结:

  • + 表示重复至少 1 次

  • ? 表示重复 0 次或1次

  • * 表示重复 0 次或多次

  • {m, n} 表示复 m 到 n 次

1.3.2 元字符 - 字符类 (比如 \d 表示 0~9)
  1. [ ]匹配字符集合

例如:后面的字符串只要包含 abc 中任意一个字符,都返回 true

  1. [ ] 里面加上 - 连字符

  • 使用连字符 - 表示一个范围

    console.log(/^[a-z]$/.test('c'))  // true
  • 比如:

    • [a-z] 表示 a 到 z 26个英文字母都可以

    • [a-zA-Z] 表示大小写都可以

    • [0-9] 表示 0~9 的数字都可以

  • 例如:

  1. [ ] 里面加上^ 取反符号

  • 比如:

    • [^a-z] 匹配除了小写字母以外的字符

    • 注意要写到中括号里面

  1. . 匹配除换行符之外的任何单个字符

1.3.4 总结
  • 字符类 . (点)代表什么意思?

    • 匹配除换行符之外的任何单个字符

  • 字符类 [] 有若干代表什么意思?

    • [abc] 匹配abc其中的任何单个字符

    • [a-z] 匹配26个小写英文字母其中的任何单个字符

    • [^a-z] 匹配除了26个小写英文字母之外的其他任何单个字符

1.3.5 用户名验证案例

需求:用户名要求用户英文字母,数字,下划线或者短横线组成,并且用户名长度为 6~16位

分析:

①:首先准备好这种正则表达式模式 /^[a-zA-Z0-9-_]{6,16}$/

②:当表单失去焦点就开始验证

③:如果符合正则规范, 则让后面的span标签添加 right 类

④:如果不符合正则规范, 则让后面的span标签添加 wrong 类

1.3.7 字符类预定义(能认出即可)

预定义:指的是 某些常见模式的简写方式。

预定类说明
\d匹配0-9之间的任意数字,相当于[0-9]
\D匹配所有0-9以外的字符,相当于[^0-9]
\w匹配任意的字母,数字和下划线,相当于[A-Za-z0-9]
\W除所有字母、数字和下划线以外的字符,相当于[^A-Za-z0-9]
\s匹配空格(包括换行符,制表符,空格符等),相当于[\t\r\n\v\f]
\S匹配非空格的字符,相当于[^\t\r\n\v\f]

例如:

1.4 修饰符
1.4.1 修饰符使用
  • 修饰符约束正则执行的某些细节行为,如是否区分大小写、是否支持多行匹配等

  • 语法:

    • i 是单词 ignore 的缩写,正则匹配时字母不区分大小写

    • g 是单词 global 的缩写,匹配所有满足正则表达式的结果

    例如:

1.4.2 replace 替换

语法:

1.4.3 案例 过滤敏感字

需求:要求用户不能输入敏感字

比如,shadow老师上课很**

分析:

①:用户输入内容

②:内容进行正则替换查找,找到敏感词,进行**

③:要全局替换使用修饰符 g

2. 综合案例 小兔鲜页面注册

分析业务模块:

①: 发送验证码模块

②: 各个表单验证模块

③: 勾选已经阅读同意模块

④: 下一步验证全部模块:只要上面有一个input验证不通过就不同意提交

需求①: 发送验证码
 	用户点击之后,显示  05秒后重新获取
	时间到了,自动改为 重新获取
需求②: 用户名验证(注意封装函数  verifyxxx) , 失去焦点触发这个函数
 	正则  /^[a-zA-Z0-9-_]{6,10}$/
	如果不符合要求,则出现提示信息  并 return false  中断程序
	否则 则返回return true  
                 之所以返回 布尔值,是为了 最后的提交按钮做准备
                 侦听使用change事件,当鼠标离开了表单,并且表单值发生了变化时触发(类似京东效果)
需求③: 手机号验证
 	 正则: /^1(3\d|4[5-9]|5[0-35-9]|6[567]|7[0-8]|8\d|9[0-35-9])\d{8}$/
	 其余同上
需求④: 验证码验证
 	正则  /^\d{6}$/
	其余同上
需求⑤: 密码验证
 	正则  /^[a-zA-Z0-9-_]{6,20}$/
	其余同上
需求⑥: 再次密码验证
 	 如果本次密码不等于上面输入的密码则返回错误信息
	 其余同上
需求⑦: 我同意模块
 	添加类  .icon-queren2  则是默认选中样式  可以使用 toggle切换类
	
需求⑧: 表单提交模块
 	 使用 submit 提交事件
	 如果没有勾选同意协议,则提示  需要勾选
                   classList.contains() 看看有没有包含某个类,如果有则返回true,么有则返回false
                  如果上面input表单 只要有模块,返回的是 false 则 阻止提交

3. 阶段案例

3.1 小兔鲜登录页面

需求:

①: tab切换

②: 点击登录可以跳转页面

  • 先阻止默认行为

  • 如果没有勾选同意,则提示要勾选

  • required 属性不能为空

  • 假设登录成功

    • 把用户名记录到本地存储中

    • 同时跳转到首页 location.href

3.2 小兔鲜首页页面

需求:

①:从登录页面跳转过来之后,自动显示用户名

②:如果点击退出,则不显示用户名

  • 54
    点赞
  • 51
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值