我尝试“验证”日期字段。我只想允许,数字字符和 - 字符。
$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”和“ - ”字符。
谢谢
答案 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-]+$/";
尝试一下