以下模式有什麼問題?正則表達式,preg_match
~(?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
以下模式有什麼問題?正則表達式,preg_match
~(?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
你忘了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。
試試這個:
$regex = '#^[0-9]{2}.[1-9][0-9]{0,1}.[0-9]{4}$#';
應該允許2種第一格式,而不是別人。
所以你不想允許前導零?僅在月份還是在當天的部分?你的規格很模糊。另外,爲什麼不允許在第一位領先零? – 2012-03-29 10:05:44
也是在白天... 2012年12月12日不應該被允許。 – hardik 2012-03-29 10:07:42