日常开发过程中,经常遇到通过正则表达式筛选数据的情况,这里主要记录一下精确匹配年月或年月日格式的正则表达式。
1、匹配YYYY-MM格式
const regex = /^\d{4}-(0[1-9]|1[0-2])$/
regex.test('2002-00') // false
regex.test('2002-01') // true
regex.test('2002-11') // true
regex.test('2002-13') // false
regex.test('2002-03-02') // false
regex.test('2002-3') // false
2、匹配YYYY-MM-DD格式
const regex = /^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])$/
regex.test('2002-00-01') // false
regex.test('2002-01-00') // false
regex.test('2002-01-01') // true
regex.test('2002-12-11') // true
regex.test('2002-13-02') // false
regex.test('2002-03') // false
3、匹配YYYY-MM-DD格式,且年不能以 “0” 开头
const regex = /^[1-9]\d{3}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])$/
regex.test('0102-00-01') // false
regex.test('2002-01-10') // true
解释一下:
`^` 和 `$` 表示匹配整个字符串,不能有杂质,其中`^` 表示匹配字符串开头,`$` 表示匹配字符串末尾。
`\d{4}` 表示匹配4个数字,即年份。
`-` 表示匹配一个短横线,`()` 表示分组,`|` 表示交替(OR)。
`(0[1-9]|1[0-2])` 表示匹配月份,其中 `0[1-9]` 表示匹配01到09之间的数字,`1[0-2]` 表示匹配10到12之间的数字。
`(0[1-9]|[12]\d|3[01])` 表示匹配日期,其中 `0[1-9]` 表示匹配01到09之间的数字,`[12]\d` 表示匹配10到29之间的数字,`3[01]` 表示匹配30或31。