前言
「这是我参与11月更文挑战的第3天,活动详情查看:2021最后一次更文挑战」。
本节学习总结正则表达式-其他断言
先来点简单练习
验证QQ号
描述: QQ号一般是5位~10位,验证输入的QQ号是否有效。
例子: 10000,666666,,88888888,1148716206
console.log(/^[1-9][0-9]{4,9}$/.test('4444')) //false
console.log(/^[1-9][0-9]{4,9}$/.test('12345')) //true
console.log(/^[1-9][0-9]{4,9}$/.test('1234567890')) //true
console.log(/^[1-9][0-9]{4,9}$/.test('12345678901')) //false
复制代码
匹配16进制颜色
描述: 16进制颜色,以‘#’开头的,后面可以是3位或6位(纯数字、纯字母、数字+字母)的组合,数字的范围是(0-9),字母的范围是(a-f和A-F)
例子: #FFF #F0F #FF #c1c1c1 #000000
console.log(color.match(/#([a-fA-F\d]{6}|[a-fA-F\d]{3})/g)) //true
let color = '#fff #F0F #ff01df #ffadbb'
console.log(/#([a-fA-F\d]{6}|[a-fA-F]{3})/.test('#fff'))
// [ '#fff', '#F0F', '#ff01df', '#ffadbb' ]
复制代码
时间 日期
- 第一位:0 1 2
- 第二位: 第一位是 0 1 时,[0 - 9]; 第一位是 2 时,[0 - 3]
- 第三位: 冒号
- 第四位: [0- 5]
- 第五位: [0-9]
console.log('01:01'.match(/^([01]\d|2[03]):[0-5]\d/g)) //[ '01:01' ]
console.log('11:59'.match(/^([01]\d|2[03]):[0-5]\d/g)) //[ '11:59' ]
console.log(/^([01]\d|2[03]:[0-5]\d)/.test('23:59')) //true
console.log('2021-10-28'.match(/\d{4}-(0\d|1[0-2])-(0[1-9]|[12]\d|3[01])/g)) //[ '2021-10-28' ]
console.log('2021-01-01'.match(/\d{4}-(0\d|1[0-2])-(0[1-9]|[12]\d|3[01])/g)) //[ '2021-01-01' ]
console.log(/\d{4}-(0\d|1[0-2]-(0[1-9]|[12]\d|3[01]))/.test('2021-12-31')) //true
复制代码
验证手机号
描述: 11位数,1开头,第二位3~9 例子: 17622223333
var phoneNumber = '17622223333'
console.log(/^1[3-9]\d{9}$/.test(phoneNumber)) //true
复制代码
巩固一下
数字千分位分隔
描述:
- 111222333 -> 111,222,333
- (?=p) 正向先行断言 在p前面, 但是最前面会有','
- 所以先用(?!p) 负向先行断言 除去开头
var num = "111222333"
console.log(num.replace(/(?!^)(?=(\d{3})+$)/g, ",")) //111,222,333
复制代码
解析:
(?!^) 表示除了首位的其他位置,(?=(\d{3})+$),以三个一组结尾,匹配多次;
如果是(?=\d{3}),结果是 1,1,1,2,2,2,333,所以用 (?=(\d{3})+$)
分隔手机号
描述: 17622223333 -> 176-2222-3333
var phoneNumber = "17622223333"
console.log(phoneNumber.replace(/(?=(\d{4})+$)/g, "-")) //176-2222-3333
复制代码
解析: (?=p) 正向先行断言 在p前面,第一组只有三位数,不会有'-'