fix: "日期"匹配支持闰年且正确匹配对应月份的30/31日 #33

This commit is contained in:
宁宁 2019-09-30 16:26:28 +08:00
parent 3815ed7c2e
commit 5b9d2aefbd
2 changed files with 42 additions and 39 deletions

View File

@ -77,52 +77,52 @@ https://any86.github.io/any-rule/
### 版本号格式必须为X.Y.Z ### 版本号格式必须为X.Y.Z
```javascript ```javascript
/^\d+(?:\.\d+){2}$/ /^\d+(\.\d+){2}$/
``` ```
### 视频链接地址(视频格式可按需增删) ### 视频链接地址(视频格式可按需增删)
```javascript ```javascript
/^https?:\/\/.*?(?:swf|avi|flv|mpg|rm|mov|wav|asf|3gp|mkv|rmvb|mp4)$/i /^https?:\/\/.*?(swf|avi|flv|mpg|rm|mov|wav|asf|3gp|mkv|rmvb|mp4)$/i
``` ```
### 图片链接地址(图片格式可按需增删) ### 图片链接地址(图片格式可按需增删)
```javascript ```javascript
/^https?:\/\/.*?(?:gif|png|jpg|jpeg|webp|svg|psd|bmp|tif)$/i /^https?:\/\/.*?(gif|png|jpg|jpeg|webp|svg|psd|bmp|tif)$/i
``` ```
### 24小时制时间HH:mm:ss ### 24小时制时间HH:mm:ss
```javascript ```javascript
/^(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d$/ /^((?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d$)/
``` ```
### 12小时制时间hh:mm:ss ### 12小时制时间hh:mm:ss
```javascript ```javascript
/^(?:1[0-2]|0?[1-9]):[0-5]\d:[0-5]\d$/ /^(1[0-2]|0?[1-9]):[0-5]\d:[0-5]\d$/
``` ```
### base64格式 ### base64格式
```javascript ```javascript
/^\s*data:(?:[a-z]+\/[a-z0-9-+.]+(?:;[a-z-]+=[a-z0-9-]+)?)?(?:;base64)?,([a-z0-9!$&',()*+;=\-._~:@\/?%\s]*?)\s*$/i /^\s*data:([a-z]+\/[a-z0-9-+.]+(;[a-z-]+=[a-z0-9-]+)?)?(;base64)?,([a-z0-9!$&',()*+;=\-._~:@\/?%\s]*?)\s*$/i
``` ```
### 数字/货币金额(支持负数、千分位分隔符) ### 数字/货币金额(支持负数、千分位分隔符)
```javascript ```javascript
/(?:^[-]?[1-9]\d{0,2}(?:$|(?:,\d{3})*(?:$|(\.\d{1,2}$))))|(?:(?:^[0](\.\d{1,2})?)|(?:^[-][0]\.\d{1,2}))$/ /(^[-]?[1-9]\d{0,2}($|(,\d{3})*($|(\.\d{1,2}$))))|((^[0](\.\d{1,2})?)|(^[-][0]\.\d{1,2}))$/
``` ```
### 数字/货币金额 (只支持正数、不支持校验千分位分隔符) ### 数字/货币金额 (只支持正数、不支持校验千分位分隔符)
```javascript ```javascript
/(?:^[1-9]([0-9]+)?(?:\.[0-9]{1,2})?$)|(?:^(?:0){1}$)|(?:^[0-9]\.[0-9](?:[0-9])?$)/ /(^[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/
``` ```
### 银行卡号10到30位, 覆盖对公/私账户, 参考[微信支付](https://pay.weixin.qq.com/wiki/doc/api/xiaowei.php?chapter=22_1) ### 银行卡号16或19位
```javascript ```javascript
/^[1-9]\d{9,29}$/ /^([1-9]{1})(\d{15}|\d{18})$/
``` ```
### 中文姓名 ### 中文姓名
```javascript ```javascript
/^(?:[\u4e00-\u9fa5·]{2,16})$/ /^([\u4e00-\u9fa5·]{2,16})$/
``` ```
### 英文姓名 ### 英文姓名
@ -142,32 +142,32 @@ https://any86.github.io/any-rule/
### 车牌号(新能源+非新能源) ### 车牌号(新能源+非新能源)
```javascript ```javascript
/^(?:[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领 A-Z]{1}[A-HJ-NP-Z]{1}(?:(?:[0-9]{5}[DF])|(?:[DF](?:[A-HJ-NP-Z0-9])[0-9]{4})))|(?:[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领 A-Z]{1}[A-Z]{1}[A-HJ-NP-Z0-9]{4}[A-HJ-NP-Z0-9 挂学警港澳]{1})$/ /^([京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领 A-Z]{1}[A-HJ-NP-Z]{1}(([0-9]{5}[DF])|([DF]([A-HJ-NP-Z0-9])[0-9]{4})))|([京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领 A-Z]{1}[A-Z]{1}[A-HJ-NP-Z0-9]{4}[A-HJ-NP-Z0-9 挂学警港澳]{1})$/
``` ```
### 网址 ### 网址
```javascript ```javascript
/^(?:(?:https?|ftp):\/\/)?(?:[\da-z.-]+)\.(?:[a-z.]{2,6})(?:\/\w\.-]*)*\/?/ /^((https?|ftp):\/\/)?([\da-z.-]+)\.([a-z.]{2,6})(\/\w\.-]*)*\/?/
``` ```
### 中国手机号(严谨), 根据工信部2019年最新公布的手机号段 ### 中国手机号(严谨), 根据工信部2019年最新公布的手机号段
```javascript ```javascript
/^(?:(?:\+|00)86)?1(?:(?:3[\d])|(?:4[5-7|9])|(?:5[0-3|5-9])|(?:6[5-7])|(?:7[0-8])|(?:8[\d])|(?:9[1|8|9]))\d{8}$/ /^((\+|00)86)?1((3[\d])|(4[5,6,7,9])|(5[0-3,5-9])|(6[5-7])|(7[0-8])|(8[\d])|(9[1,8,9]))\d{8}$/
``` ```
### 中国手机号(宽松), 只要是13,14,15,16,17,18,19开头即可 ### 中国手机号(宽松), 只要是13,14,15,16,17,18,19开头即可
```javascript ```javascript
/^(?:(?:\+|00)86)?1[3-9]\d{9}$/ /^((\+|00)86)?1[3-9]\d{9}$/
``` ```
### 中国手机号(最宽松), 只要是1开头即可, 如果你的手机号是用来接收短信, 优先建议选择这一条 ### 中国手机号(最宽松), 只要是1开头即可, 如果你的手机号是用来接收短信, 优先建议选择这一条
```javascript ```javascript
/^(?:(?:\+|00)86)?1\d{10}$/ /^((\+|00)86)?1\d{10}$/
``` ```
### 日期 ### 日期
```javascript ```javascript
/^\d{4}(-)(1[0-2]|0?\d)\1([0-2]\d|\d|30|31)$/ /^(([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})-(((0[13578]|1[02])-(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)-(0[1-9]|[12][0-9]|30))|(02-(0[1-9]|[1][0-9]|2[0-8]))))|((([0-9]{2})(0[48]|[2468][048]|[13579][26])|((0[48]|[2468][048]|[3579][26])00))-02-29)$/
``` ```
### 邮箱地址(email) ### 邮箱地址(email)

View File

@ -64,53 +64,53 @@ module.exports = [
}, },
{ {
title: '版本号格式必须为X.Y.Z', title: '版本号格式必须为X.Y.Z',
rule: /^\d+(?:\.\d+){2}$/, rule: /^\d+(\.\d+){2}$/,
examples: ['16.3.10'] examples: ['16.3.10']
}, },
{ {
title: '视频链接地址(视频格式可按需增删)', title: '视频链接地址(视频格式可按需增删)',
rule: /^https?:\/\/.*?(?:swf|avi|flv|mpg|rm|mov|wav|asf|3gp|mkv|rmvb|mp4)$/i, rule: /^https?:\/\/.*?(swf|avi|flv|mpg|rm|mov|wav|asf|3gp|mkv|rmvb|mp4)$/i,
examples: ['http://www.abc.com/video/wc.avi'] examples: ['http://www.abc.com/video/wc.avi']
}, },
{ {
title: '图片链接地址(图片格式可按需增删)', title: '图片链接地址(图片格式可按需增删)',
rule: /^https?:\/\/.*?(?:gif|png|jpg|jpeg|webp|svg|psd|bmp|tif)$/i, rule: /^https?:\/\/.*?(gif|png|jpg|jpeg|webp|svg|psd|bmp|tif)$/i,
examples: ['https://www.abc.com/logo.png'] examples: ['https://www.abc.com/logo.png']
}, },
{ {
title: '24小时制时间HH:mm:ss', title: '24小时制时间HH:mm:ss',
rule: /^(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d$/, rule: /^((?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d$)/,
examples: ['23:34:55'] examples: ['23:34:55']
}, },
{ {
title: '12小时制时间hh:mm:ss', title: '12小时制时间hh:mm:ss',
rule: /^(?:1[0-2]|0?[1-9]):[0-5]\d:[0-5]\d$/, rule: /^(1[0-2]|0?[1-9]):[0-5]\d:[0-5]\d$/,
examples: ['11:34:55'], examples: ['11:34:55'],
counterExamples: ['23:34:55'] counterExamples: ['23:34:55']
}, },
{ {
title: 'base64格式', title: 'base64格式',
rule: /^\s*data:(?:[a-z]+\/[a-z0-9-+.]+(?:;[a-z-]+=[a-z0-9-]+)?)?(?:;base64)?,([a-z0-9!$&',()*+;=\-._~:@/?%\s]*?)\s*$/i, rule: /^\s*data:([a-z]+\/[a-z0-9-+.]+(;[a-z-]+=[a-z0-9-]+)?)?(;base64)?,([a-z0-9!$&',()*+;=\-._~:@/?%\s]*?)\s*$/i,
examples: ['data:image/gif;base64,xxxx=='] examples: ['data:image/gif;base64,xxxx==']
}, },
{ {
title: '数字/货币金额(支持负数、千分位分隔符)', title: '数字/货币金额(支持负数、千分位分隔符)',
rule: /(?:^[-]?[1-9]\d{0,2}(?:$|(?:,\d{3})*(?:$|(\.\d{1,2}$))))|(?:(?:^[0](\.\d{1,2})?)|(?:^[-][0]\.\d{1,2}))$/, rule: /(^[-]?[1-9]\d{0,2}($|(,\d{3})*($|(\.\d{1,2}$))))|((^[0](\.\d{1,2})?)|(^[-][0]\.\d{1,2}))$/,
examples: [100, -0.99, 3, 234.32, -1, 900, 235.09] examples: [100, -0.99, 3, 234.32, -1, 900, 235.09]
}, },
{ {
title: '数字/货币金额 (只支持正数、不支持校验千分位分隔符)', title: '数字/货币金额 (只支持正数、不支持校验千分位分隔符)',
rule: /(?:^[1-9]([0-9]+)?(?:\.[0-9]{1,2})?$)|(?:^(?:0){1}$)|(?:^[0-9]\.[0-9](?:[0-9])?$)/, rule: /(^[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/,
examples: [0.99, 8.99, 666] examples: [0.99, 8.99, 666]
}, },
{ {
title: '银行卡号10到30位, 覆盖对公/私账户, 参考[微信支付](https://pay.weixin.qq.com/wiki/doc/api/xiaowei.php?chapter=22_1)', title: '银行卡号16或19位',
rule: /^[1-9]\d{9,29}$/, rule: /^([1-9]{1})(\d{15}|\d{18})$/,
examples: [6234567890, 6222026006705354217] examples: [6222026006705354217]
}, },
{ {
title: '中文姓名', title: '中文姓名',
rule: /^(?:[\u4e00-\u9fa5·]{2,16})$/, rule: /^([\u4e00-\u9fa5·]{2,16})$/,
examples: ['葛二蛋', '凯文·杜兰特', '德克·维尔纳·诺维茨基'] examples: ['葛二蛋', '凯文·杜兰特', '德克·维尔纳·诺维茨基']
}, },
{ {
@ -130,33 +130,36 @@ module.exports = [
}, },
{ {
title: '车牌号(新能源+非新能源)', title: '车牌号(新能源+非新能源)',
rule: /^(?:[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领 A-Z]{1}[A-HJ-NP-Z]{1}(?:(?:[0-9]{5}[DF])|(?:[DF](?:[A-HJ-NP-Z0-9])[0-9]{4})))|(?:[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领 A-Z]{1}[A-Z]{1}[A-HJ-NP-Z0-9]{4}[A-HJ-NP-Z0-9 挂学警港澳]{1})$/, rule: /^([京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领 A-Z]{1}[A-HJ-NP-Z]{1}(([0-9]{5}[DF])|([DF]([A-HJ-NP-Z0-9])[0-9]{4})))|([京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领 A-Z]{1}[A-Z]{1}[A-HJ-NP-Z0-9]{4}[A-HJ-NP-Z0-9 挂学警港澳]{1})$/,
examples: ['京A12345D', '京A00599'] examples: ['京A12345D', '京A00599']
}, },
{ {
title: '网址', title: '网址',
rule: /^(?:(?:https?|ftp):\/\/)?(?:[\da-z.-]+)\.(?:[a-z.]{2,6})(?:\/\w\.-]*)*\/?/, rule: /^((https?|ftp):\/\/)?([\da-z.-]+)\.([a-z.]{2,6})(\/\w\.-]*)*\/?/,
examples: ['www.qq.com'] examples: ['www.qq.com']
}, },
{ {
title: '中国手机号(严谨), 根据工信部2019年最新公布的手机号段', title: '中国手机号(严谨), 根据工信部2019年最新公布的手机号段',
rule: /^(?:(?:\+|00)86)?1(?:(?:3[\d])|(?:4[5-7|9])|(?:5[0-3|5-9])|(?:6[5-7])|(?:7[0-8])|(?:8[\d])|(?:9[1|8|9]))\d{8}$/, rule: /^((\+|00)86)?1((3[\d])|(4[5,6,7,9])|(5[0-3,5-9])|(6[5-7])|(7[0-8])|(8[\d])|(9[1,8,9]))\d{8}$/,
examples: ['008618311006933', '+8617888829981', '19119255642'] examples: ['18311006933', '17888829981']
}, },
{ {
title: '中国手机号(宽松), 只要是13,14,15,16,17,18,19开头即可', title: '中国手机号(宽松), 只要是13,14,15,16,17,18,19开头即可',
rule: /^(?:(?:\+|00)86)?1[3-9]\d{9}$/, rule: /^((\+|00)86)?1[3-9]\d{9}$/,
examples: ['008618311006933', '+8617888829981', '19119255642'] examples: ['18311006933', '17888829981']
}, },
{ {
title: '中国手机号(最宽松), 只要是1开头即可, 如果你的手机号是用来接收短信, 优先建议选择这一条', title: '中国手机号(最宽松), 只要是1开头即可, 如果你的手机号是用来接收短信, 优先建议选择这一条',
rule: /^(?:(?:\+|00)86)?1\d{10}$/, rule: /^((\+|00)86)?1\d{10}$/,
examples: ['008618311006933', '+8617888829981', '19119255642'] examples: ['18311006933', '17888829981']
}, },
{ {
// 参考: https://www.cnblogs.com/mgod/archive/2007/04/26/728628.html
title: '日期', title: '日期',
rule: /^\d{4}(-)(1[0-2]|0?\d)\1([0-2]\d|\d|30|31)$/, // rule: /^\d{4}(-)(1[0-2]|0?\d)\1([0-2]\d|\d|30|31)$/,
examples: ['1990-12-12', '2020-1-1'] rule: /^(([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})-(((0[13578]|1[02])-(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)-(0[1-9]|[12][0-9]|30))|(02-(0[1-9]|[1][0-9]|2[0-8]))))|((([0-9]{2})(0[48]|[2468][048]|[13579][26])|((0[48]|[2468][048]|[3579][26])00))-02-29)$/,
examples: ['1990-12-12', '2020-01-01', '2000-02-29'],
counterExamples: ['2001-04-31', '2019-02-29']
}, },
{ {
title: '邮箱地址(email)', title: '邮箱地址(email)',