[英]Regular expression with 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
请帮忙...
谢谢哈迪克
您忘记了锚定正则表达式。 同样,如果只允许四位数的年份,则必须明确指出:
~^(?P<day>[0-9]{1,2})[.](?P<month>[0-9]{1,2})[.](?P<year>[0-9]{4})$~
^
和$
仅在字符串的开头和结尾匹配,确保您的正则表达式与2012.12.12
中的12.12.12
子字符串不匹配。
如果要禁止前导零,请使用
~^(?P<day>[1-9][0-9]?)[.](?P<month>[1-9][0-9]?)[.](?P<year>[0-9]{4})$~
当然,这不会进行任何健全性检查(99.99.9999通过此正则表达式),但是无论如何都不应使用正则表达式来检查有效日期。
尝试这个:
$regex = '#^[0-9]{2}.[1-9][0-9]{0,1}.[0-9]{4}$#';
它应该允许前两种格式,而不允许其他格式。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.