正则表达式与preg_match

时间:2012-03-29 09:39:10

标签: php regex

以下模式有什么问题??

~(?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

2 个答案:

答案 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种第一种格式,而不是其他格式。