以下模式有什么问题??
~(?P<day>[1-9]{1,2})[.](?P<month>[1-9]{1,2})[.](?P<year>[0-9]{1,4})~
我想允许以下格式..
21.12.2012
21.8.2012 // not 21.08.2012
但它也允许..
2012.12.12
12.12.12
请帮忙......
谢谢你, Hardik
答案 0 :(得分:3)
你忘了anchor正则表达式。此外,如果您只想允许四位数年份,则必须明确说明:
~^(?P<day>[0-9]{1,2})[.](?P<month>[0-9]{1,2})[.](?P<year>[0-9]{4})$~
^
和$
仅匹配字符串的开头和结尾,确保您的正则表达式与12.12.12
中的2012.12.12
子字符串不匹配。
如果您想禁止前导零,请使用
~^(?P<day>[1-9][0-9]?)[.](?P<month>[1-9][0-9]?)[.](?P<year>[0-9]{4})$~
当然,这不会进行任何健全性检查(99.99.9999通过此正则表达式),但检查有效日期是you shouldn't be doing with a regex anyway。
答案 1 :(得分:0)
试试这个:
$regex = '#^[0-9]{2}.[1-9][0-9]{0,1}.[0-9]{4}$#';
它应该允许2种第一种格式,而不是其他格式。