我有一个包含一组时间戳的文件,我想找到一种方法来过滤它们,并使用正则表达式从格式化的井中找到错误的格式:
$line = array(20171203124500,20150120183045,20140621064431);
$args = array('filter' => FILTER_VALIDATE_REGEXP,
'options' => array('regexp' => 'REGEX-HERE'), );
$result = filter_var_array($line, $args);
var_dump($result);
我还想检查一个月中的某一天是否正确:
我有这个表达:
^(?:(?:(?:0?[1-9]|1\d|2[0-8])\/(?:0?[1-9]|1[0-2]))\/(?:(?:1[6-9]|[2-9]\d)\d{2}))$|^(?:(?:(?:31\/0?[13578]|1[02])|(?:(?:29|30)\/(?:0?[1,3-9]|1[0-2])))\/(?:(?:1[6-9]|[2-9]\d)\d{2}))$|^(?:29\/0?2\/(?:(?:(?:1[6-9]|[2-9]\d)(?:0[48]|[2468][048]|[13579][26]))))$
但是这个格式的日期是:31/01/2001
此表达式验证巴西d / m / y格式的日期(来自 1/1/1600 - 12/31/9999)。这些日子在给定的月份和 年。从1600-9999开始,所有4位数年份的闰年均经过验证。 天和月必须是1或2位数,并且可能具有前导零。 年份必须是4位数年份,介于1600和9999之间。日期分隔符 必须是斜杠(/)
如何调整此正则表达式以匹配我查找的格式:YYYYmmddHHMMSS
答案 0 :(得分:1)
正则表达式应该是:
(?:(?:(?:(?:(?:[13579][26]|[2468][048])00)|(?:[0-9]{2}(?:(?:[13579][26])|(?:[2468][048]|0[48]))))(?:(?:(?:09|04|06|11)(?:0[1-9]|1[0-9]|2[0-9]|30))|(?:(?:01|03|05|07|08|10|12)(?:0[1-9]|1[0-9]|2[0-9]|3[01]))|(?:02(?:0[1-9]|1[0-9]|2[0-9]))))|(?:[0-9]{4}(?:(?:(?:09|04|06|11)(?:0[1-9]|1[0-9]|2[0-9]|30))|(?:(?:01|03|05|07|08|10|12)(?:0[1-9]|1[0-9]|2[0-9]|3[01]))|(?:02(?:[01][0-9]|2[0-8])))))(?:0[0-9]|1[0-9]|2[0-3])(?:[0-5][0-9]){2}
要知道日期是否有效,您需要使用checkdate($month, $day, $year)
。
请参阅doc:checkdate