-2

我正在进行日期验证,但它一直给我一条错误消息

注意:未定义变量:第 15 行 C:\xampp\htdocs\signup.php 中的部分

if (empty($_POST['birthday']))
    // the user's date of birth cannot be a null string
    $errors[] = "You must supply a date of birth.";
else if (!strpos("^([0-9]{2})/([0-9]{2})/([0-9]{4})$", $_POST['birthday'], $parts))
    // Check the format
    $errors[] = "The date of birth is not a valid date in the " .
        "format DD/MM/YYYY";
elseif (!checkdate($parts[2],$parts[1],$parts[3]))
    $errors[] = "The date of birth is invalid. " .
        "Please check that the month is between 1 and 12, " .
        "and the day is valid for that month.";
elseif (intval($parts[3]) < 1890)
    // Make sure that the user has a reasonable birth year
    $errors[] = "You must be alive to use this service.";
4

4 回答 4

1

我昨晚刚刚回答了一些关于这个的问题。你太辛苦了!

PHP 已经有许多不同的验证器。使用 checkdate 代替 REGEX 进行验证

参考: http: //php.net/manual/en/function.checkdate.php

于 2012-08-20T05:58:37.130 回答
0

问题是您为正则表达式匹配使用了错误的函数。

采用preg_match("/^([0-9]{2})\/([0-9]{2})\/([0-9]{4})$/", $_POST['birthday'], $parts)

于 2012-08-20T05:40:05.607 回答
0

你的使用strpos是错误的。检查strpos 手册

第三个参数可用于指定从哪里开始,而不是指定用于正则表达式模式匹配的目标数组,您从哪里得到 strpos 可以做到这一点的想法?strpos 根本不支持正则表达式。

您应该改用preg_match_all,例如:

preg_match_all("{^([0-9]{2})/([0-9]{2})/([0-9]{4})$}", $_POST['birthday'], $parts);
于 2012-08-20T05:40:14.653 回答
0

您有一个致命的错误,即变量 $part 仅在第一个 if 语句中起作用。尝试在第一个 if 语句之后添加:

$part = strpos("^([0-9]{2})/([0-9]{2})/([0-9]{4})$", $_POST['birthday'])

您还想尝试:LiveValidation以获得更好的验证

或使用此功能:checkdate

于 2012-08-20T05:42:09.320 回答