1

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

 $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”和“-”字符填写该字段。

谢谢

4

3 回答 3

7

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

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

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

于 2009-12-15T19:58:34.490 回答
5

user187291 的正则表达式将仅匹配日期字符,这是您想要的。验证日期的一种快速方法是尝试通过以下方式将其转换为时间戳strtotime()

if (strtotime($date_str)!==false) {
  // The date is valid.
}
于 2009-12-15T20:03:38.630 回答
0
$char_re_good = "/^[0-9-]+$/";

试试看

于 2009-12-15T19:57:35.867 回答