JavaScript - day15

26 阅读2分钟

一、正则表达式

定义字符串中字符出现规则的表达式
  • 何时使用:切割 替换 【验证】

  • 语法:/正则表达式/

  • 最简单的正则就是关键字原文 "原文" -> /原文/后缀

  • 后缀

      1. g:找全部<br>
      2. i:忽略大小写
    
  • 备选字符集:/^[备选字符集]$/

    1. 一个中括号,只管一位字符
    2. 正则表达式默认只要满足就不管后续了,解决:前加^,后加,两者同时使用,代表要求从头到尾完全匹配/[备选字符集],两者同时使用,代表要求从头到尾完全匹配/^[备选字符集]/ - 只要做验证必加!
    3. 一位数字:[0-9];
    4. 一位字母:[A-Za-z];
    5. 一位数字、字母、下划线:[0-9A-Za-z_]
    6. 一位汉字:[\u4e00-\u9fa5]
    7. 除了数字之外的:[^0-9]
  • 预定义字符集:一个只管一位

    1. 一位数字:\d ===>[0-9]
    2. 一位数字、字母、下划线:\w ===> [0-9A-Za-z_]
    3. 一位空白字符:\s
    4. 一位除了换行外的任意字符:.
  • 量词:规定一个字符集出现的次数:

  1. 有明确数量:

    • 字符集{n,m}:前边相邻的字符集,至少n个,最多m个
    • 字符集{n,}:前边相邻的字符集,至少n个,多了不限
    • 字符集{n}:前边相邻的字符集,必须n个
  2. 无明确数量:

    • 字符集?:前边相邻的字符集,可有可无,最多1个
    • 字符集*:前边相邻的字符集,可有可无,多了不限
    • 字符集+:前边相邻的字符集,至少一个,多了不限
  • 选择和分组
  1. 选择:在多个规则中选一个
    • 规则1|规则2
  2. 分组:将多个字符集临时组成一组子规则
    • (规则1|规则2)
  • 指定匹配位置
    1. ^:开头
    2. $:结尾
    3. 特殊:两者同时使用,前加^,后加$,表示从头到尾要求完全匹配 - 只要你做【验证】
  • 密码强度验证:2-4位,可以输入数字、字母,但是必须出现一位大写和一位数字的组合:/^[0-9A-Za-z]{2,4}$/
  • 预判公式
    1. (?![0-9]+$) -> 不能全由数字组成,可能有大写、小写、汉字、日文、特殊符号...
    2. (?![a-z]+$) -> 不能全由小写组成,可能有数字、大写、汉字、日文、特殊符号...
    3. (?![0-9a-z]+$) -> 不能全由数字组成、也不能全由小写组成、也不能全由数字和小写的组合组成
    4. /(?![0-9a-z]+)(?![AZaz]+)(?![A-Za-z]+)[0-9A-Za-z]{2,4};//2-4位,可以输入数字、字母,但是必须出现一位大写和一位数字的组合
    5. /(?![0-9a-z]+)(?![AZaz]+)(?![A-Za-z]+)(?![A-Z0-9]+$)[0-9A-Za-z]{2,4}/;//必须三者都有
    6. /(?![0-9A-Za-z]+$)[0-9A-Za-z_]{2,4}/;//至少要有下划线

二、支持正则表达式的字符串API

  • 切割:var arr=str.split("固定切割符"/RegExp);
  • 替换
  1. 基本替换法:
str=str.replace(/正则表达式/后缀,"新内容");
//replace支持支持正则,并且搭配上后缀g就可以找到全部
//缺陷:替换的新内容是一个固定的
  1. 高级替换法:
str=str.replace(/正则表达式/后缀,function(a,b,c){
    console.log(a);//正则匹配到的关键字
    console.log(b);//正则匹配到的关键字的下标
    console.log(c);//原字符串
    return 判断a关键字的长度,而返回不同的星星数量
});
  • 格式化:身份证
var id="500215200002022569";
var reg=/(\d{6})(\d{4})(\d{2})(\d{2})(\d{4})/;
id.replace(reg,function(a,b,c,d,e,f,g,h){
        //再replace的时候,正则出现了分组,我们会得到更多的形参
        //再形参a的后面就会出现n个形参,就看你有多少个分组
        //第1个分组获得的内容会保存在第2个形参之中
        //第2个分组获得的内容会保存在第3个形参之中
        //...
        //倒数第二个一定是下标
        //倒数第一个一定是原文本身
})
  • 格式化:手机号
var phone="15655555555";
var reg=/(\d{4})\d{4}(\d{3})/;		
phone=phone.replace(reg,(a,b,c)=>{
	return b+"####"+c;
})		
console.log(phone);

三、正则对象:

  • 创建
    1. 直接量:var reg=/正则表达式/后缀;
    2. 构造函数:var reg=new RegExp("正则表达式","后缀");
  • API
    1. 验证:var bool=reg.test(用户输入的);

四、扩展

  1. input的聚焦事件:onfocus
  2. input的失焦事件:onblur
  3. form表单的阻止提交:return false
  4. 实时获取input的内容:oninput
  5. 鼠标按下事件:onmousedown
  6. 鼠标松开事件:onmouseup