这是我使用的正则表达式:
if (preg_match("/^[0-9]{1,2}'/[0-9]{1,2}'/[0-9]{4}$/", $_POST["collection-date"]) === 0) {
$errors .= "'n Error: Invalid Collection Date";
$collectiondate = FALSE;
}
目前$_POST['collection-date']
等于 15/02/2012
并且仍然返回 false。这是为什么呢?
感谢您的任何建议。
$split = explode('/', $date);
if (!isset($split[2]) || !checkdate($split[1],$split[0],$split[2])) {
$errors .= "'n Error: Invalid Collection Date";
$collectiondate = FALSE;
}
如果有人输入无效的日期,例如您可能也想要的无效日期,例如 99/99/2012
或 31/02/2012
,这也验证 false。
我已经检查了这个正则表达式,它可以工作。
我给你一个小建议,不要检查preg_match()
的匹配数(我经常看到这个(。这很令人困惑,相信我。 == 0
的意思是如果没有找到它。就个人而言,我只是在布尔内容中使用它,即使preg_match()
返回整数(匹配数(而不是布尔值。但这并不重要 - PHP 中的0
是false
的,其他整数在布尔上下文中是true
的。在这种情况下,它通常符合您的期望 - 0 匹配通常意味着失败。
其次,除了false
之外,没有分配给$collectiondate
。我不知道这是否是故意的,但是如果您从不发送任何正值,则通常是null
或false
。在布尔上下文中,这两个值都返回 false
。事实上,false == null
是因为null
被转换为布尔值(但false !== null
,因为!==
跳过任何转换(出于 https://stackoverflow.com/a/80649/736054(中提到的原因,最好使用 ===
而不是 ==
(。