Preg_match日期字段验证

时间:2009-12-15 19:55:51

标签: php regex preg-match

我尝试“验证”日期字段。我只想允许,数字字符和 - 字符。

 $born_date=$_POST['date'];
 $goodchars = array("1","2","3","4","5","6","7","8","9","0","-");
 $char_re_good = '/['.preg_quote(join('', $goodchars), '/').']/';
       if (!(preg_match($char_re_good, $born_date))) {
            echo "not ok, contain INVALID chars"
       }else{
            echo "ok, contain valid chars"
       }

如果我试图搜索“1960”然后确定。如果我试图搜索“asdfg”然后不行。 但如果我搜索“1960 /”,那么输出就可以了。我不明白为什么。

你可以帮我修改一下,检查用户是否只填写“0-9”和“ - ”字符。

谢谢

3 个答案:

答案 0 :(得分:7)

你需要“锚定”你的表达式,即插入字符串^的开头和字符串$ markers的结尾。

 preg_match('/^[0-9-]+$/', $born_date);

但是,preg_match不是验证日期的方法。例如,以上将接受“99999999”等

答案 1 :(得分:5)

user187291's regex仅匹配日期字符,这就是您想要的。验证日期的快捷方法是尝试通过strtotime()将其转换为时间戳:

if (strtotime($date_str)!==false) {
  // The date is valid.
}

答案 2 :(得分:0)

$char_re_good = "/^[0-9-]+$/";

尝试一下