Почему моя Date возвращает false с регулярным выражением? - PullRequest
0 голосов
/ 16 февраля 2012

Это регулярное выражение, которое я использую:

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. Почему это?

Спасибо за любые предложения.

Ответы [ 2 ]

3 голосов
/ 16 февраля 2012
$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, что вы, вероятно, также хотите.

1 голос
/ 16 февраля 2012

Я проверил это регулярное выражение, и оно работает.

У меня небольшой совет, не проверяйте количество совпадений в preg_match() (я обычно видел это).Это очень запутанно, поверь мне.== 0 означает, что он не был найден.Лично я просто использую его в логическом контенте, даже если preg_match() возвращает целое число (количество совпадений), а не логическое.Но это не очень важно - 0 в PHP равно false, а другие целые числа true в логическом контексте.В этом случае оно обычно соответствует вашим ожиданиям - 0 совпадений обычно означают сбой.

Во-вторых, присваивание $collectiondate отсутствует, кроме false.Я не знаю, намеренно ли это, но если вы никогда не отправляете какое-либо положительное значение, обычно это null или false.В логическом контексте оба эти значения возвращают false.Фактически, false == null из-за того, что null был преобразован в логическое значение (но false !== null, потому что !== пропускает любые преобразования (рекомендуется использовать === вместо == по причинам, указанным в https://stackoverflow.com/a/80649/736054)).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...