RegExp 练习 (四)

RegExp 练习  (四)

前言

「这是我参与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前面,第一组只有三位数,不会有'-'

分类:
前端
标签: