$preg = '/^([12]\d\d\d)-(0?[1-9]|1[0-2])-(0?[1-9]|[12]\d|3[0-1]) ([0-1]\d|2[0-4]):([0-5]\d)(:[0-5]\d)?$/';
preg_match($preg, '2018-1-2 24:00:50')
年:([12]\d\d\d) 表示第一位只能是1或者2,后三位数字即可;范围1000-2999;
月:(0?[1-9]|1[0-2]) 表示当月份为1-9时,前面的0可传可不传,当十位数是1时,个位数只能是0-2,范围1-12
日:(0?[1-9]|[12]\d|3[0-1])表示当日是1-9时,前面的0可传可不传,当十位数是3时,个位数为0或1,范围1-31;
时:([0-1]\d|2[0-4]) 表示当一个字符是0或1的时候,第二个数字是0-9,第一个数字是2的时候,第二个数字是0-4,那么时的范围是00-24;
分:([0-5]\d) 分的范围是00-59;
秒:(:[0-5]\d)? 表示秒可传可不传,例如:2018-5-16 16:46,2018-5-16 16:46:00均可验证通过;
注意:此事件只判断格式是否正确,牵扯到是否闰年,特殊月份包含天数不加判断。
- 字符功能
- . 匹配任意1个字符(除了\n)
- [ ] 匹配[ ]中列举的字符
- \d 匹配数字,即0-9
- \D 匹配非数字,即不是数字
- \s 匹配空白,即 空格,tab键
- \S 匹配非空白
- \w 匹配单词字符,即a-z、A-Z、0-9、_
- \W 匹配非单词字符
- $ 以上一个字符结尾
- 表示数量
- 匹配多个字符的相关格式
- 字符 功能
- 匹配前一个字符出现0次或者无限次,即可有可无
- 匹配前一个字符出现1次或者无限次,即至少有1次
- ? 匹配前一个字符出现1次或者0次,即要么有1次,要么没有
- {m} 匹配前一个字符出现m次
- {m,} 匹配前一个字符至少出现m次
- {m,n} 匹配前一个字符出现从m到n次
- 表示边界
- ^ 匹配字符串开头
- $ 匹配字符串结尾
- \b 匹配一个单词的边界
- \B 匹配非单词边界
- 匹配分组
- | 匹配左右任意一个表达式
- (ab) 将括号中字符作为一个分组
- \num 引用分组num匹配到的字符串
- (?P<name>) 分组起别名
- (?P=name) 引用别名为name分组匹配到的字符串