1.正则表达式
1.正则表达式介绍
(1).正则表达式:是对 字符串进行匹配运算的 内置对象
(2).正则表达式作用:格式校验
*手机号格式 验证码格式 账号密码 邮箱格式
(3).正则表达式语法:
(1)创建正则对象 let reg=new regExp('正则表达式')
(2)调用正则对象 reg.test('字符串')
true:校验通过 false:校验不通过*/
注:js中几乎所有的对象都是new创建,js中有三个内置对象有简写语法
new Array() 简写[]
new Object() 简写{}
new Date()
new RegExp() 简写 /正则/
2.元字符与原义文本字符
正则表达式语法由两部分组成
1.原义文本字符 : 字符串本身的含义
* PS : 别多想,写什么就是什么。想的越多,错的越离谱
2.元字符 : 改变了字符串本身的含义, 类似于js中的关键字
[] {} () . \ + ? * ^ $ |
// /黑马/:检测字符串中有没有黑马
console.log(/黑马/.test('一匹黑色的马')) //false
console.log(/黑马/.test('黑马程序员')) //true
// /abc/:检测字符串中有没有abc
console.log(/abc/.test('a1b2c3')) //false
console.log(/abc/.test('abc123')) //true
3.字符类
[] : 字符类
/abc/ : 原义文本字符。 检测字符串有没有 abc
/[abc]/ : 字符类。 将a 或 b 或 c归为一类,满足任意一个即可.
说人话: 检测字符串中有没有 a 或 b 或 c
/[^abc]/ : 反向类。 将不是a 或 不是b 或 不是c的归为一类,满足任意一个即可。
说人话: 检测字符串中有没有除 abc之外的任意字符
console.log(/[abc]/.test('a123')) //true
console.log(/[abc]/.test('a1b2c3')) //true
console.log(/[abc]/.test('abc123')) //true
console.log(/[abc]/.test('123456')) //false
console.log(/[abc]/.test('abcabc')) //true
console.log('----------------------')
console.log(/[^abc]/.test('a123')) //true
console.log(/[^abc]/.test('a1b2c3')) //true
console.log(/[^abc]/.test('abc123')) //true
console.log(/[^abc]/.test('123456')) //true
console.log(/[^abc]/.test('abcabc')) //false
4.范围类
需求: 检测字符串中有没有数字字符
/[0123456789]/ : 有没有数字
需求: 检测字符串中有没有字母
/[abcdefghijklmnopqrstuvwxyz]/ : 检测字符串中有没有字母
1.范围类
/[0-9]/ : 检测有没有数字
/[a-z]/ : 检测有没有小写字母
/[A-Z]/ : 检测有没有大写字母
2.范围类特点
2.1 范围类是一个闭区间 : /[5-8]/ : 包含5,也包含8
2.2 范围类可以连写: /[0-9a-zA-Z]/ : 大小写字母+数字
2.3 范围类一定是 右边 > 左边 (依据ASCII码)
[5-8] : 正确
[8-5] : 报错
5.与定义类
预定义类: 正则表达式提供好的用来匹配常见的字符类
预定义类 等价类 含义
. [^\r\n] 除了回车和换行之外的所有字符
\d [0-9] 数字字符
\D [^0-9] 非数字字符
\s [\f\n\r\t\v] 空白字符
\S [^\f\n\r\t\v] 非空白字符
\w [a-zA-Z_0-9] 单词字符(字母、下划线、数字)
\W [^a-zA-Z_0-9] 非单词字符
6.边界
原义文本字符: /abc/ 检测字符串abc
字符类 : /[abc]/ 检测a或b或c任意字符
反向类 : /[^abc]/ 检测不是 a或b或c任意字符
边界 : /^abc/ 在正则中,有时候一个元字符可能有两种含义(类似于js的+)
边界
1.开头边界: /^abc/
正确含义: 检测 以a开头 + bc的字符串 (^只对a检测)
错误含义: 检测 以abc开头的字符串 (^把abc当做整体)
console.log(/^abc/.test('a1b2c3'))//false
console.log(/^abc/.test('123abc'))//false
console.log(/^abc/.test('abc123'))//true
console.log(/^abc/.test('abc123abc'))//true
console.log(/^abc/.test('abcabc'))//true
7.量词
为什么要有量词
需求:检测一个字符串有没有11个数字
/\d\d\d\d\d\d\d\d\d\d\d/ : 检测11个数字
量词作用: 检测字符出现的次数
? 出现零次或一次(最多出现一次 <=1)
+ 出现一次或多次(至少出现一次 >=1)
* 出现零次或多次(任意次)
{n} 出现n次
{n,m} 出现n-m次
{n,} 出现至少n次(>=n)
console.log('a123456789'.replace(/\d{5}/,'X')) //ax6789
console.log('a123456789'.replace(/\d{5,8}/,'X')) //ax9
console.log('a123456789'.replace(/\d{5,}/,'X')) //ax
8.分组
/* 元字符
[] \ . ^ $ ? + * {} | ()
*/
/* () 在正则中有两种含义
1.分组 : 把多个字符归为一组,用于量词
2.提升优先级 : 让 | 只匹配小括号内部的字符,提升|的优先级
*/
9.修饰符
1.修饰符 : 对正则表达式起到修饰的作用
g : global,全局匹配
i : intensity, 不区分大小写
2.修饰符语法: /正则表达式/修饰符
* new RegExp('正则','修饰符')
// 1. g : global,全局匹配
// /a/:只能匹配第一个a
console.log('a123A456aaAA'.replace(/a/,"X"))//X123A456aaAA
// /a/g:匹配所有的a
console.log('a123A456aaAA'.replace(/a/g,"X"))//X123A456XXAA
// 2.i : intensity, 不区分大小写
// /A/:只能匹配第一个大写的A
console.log('a123A456aaAA'.replace(/A/,"X"))//a123X456aaAA
// /A/i:匹配a或A
console.log('a123A456aaAA'.replace(/A/i,"X"))//X123A456aaAA
// 3.修饰符可以同时存在
// /a/ig:匹配所有的a或A
console.log('a123A456aaAA'.replace(/a/ig,"X"))//X123X456XXXX
总结:
/*
1.手机号正则
/^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\d{8}$/
*/
/* 2.验证码
/^\d{6}$/
*/
/* 3.账号密码 6-20位: 大小写字母, 下划线_
/^\w{6,20}$/
*/
/* 4.邮箱
/^\w+[@]\w+\.\w+(\.\w+)?$/
*/
编程思想:
1.编程思想:解决同类问题的 固定思路
求和思想:求累加和
擂台思想:求最大值/最小值
排他思想:多个元素只能选中一个
开关思想:
全选框:每一个选择框都要选中
非空判断:每一个输入框都要输入文本