Php 日期验证有问题

Php 日期验证有问题,php,validation,date,Php,Validation,Date,我正在进行日期验证,但它一直给我一条错误消息 注意:未定义变量:第15行C:\xampp\htdocs\signup.php中的部分 if(空($\u POST['birth'])) //用户的出生日期不能为空字符串 $errors[]=“您必须提供出生日期。”; else if(!strpos(^([0-9]{2})/([0-9]{2})/([0-9]{4})$”,$POST['birth'],$parts)) //检查格式 $errors[]=“出生日期不是中的有效日期”。 “格式DD/MM

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

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

if(空($\u POST['birth']))
//用户的出生日期不能为空字符串
$errors[]=“您必须提供出生日期。”;
else if(!strpos(^([0-9]{2})/([0-9]{2})/([0-9]{4})$”,$POST['birth'],$parts))
//检查格式
$errors[]=“出生日期不是中的有效日期”。
“格式DD/MM/YYYY”;
elseif(!checkdate($parts[2],$parts[1],$parts[3]))
$errors[]=“出生日期无效。”。
“请检查月份是否介于1和12之间,”。
“该日在该月有效。”;
elseif(intval($parts[3])<1890)
//确保用户有合理的出生年份
$errors[]=“您必须处于活动状态才能使用此服务。”;

问题在于您对正则表达式匹配使用了错误的函数


使用
preg\u match(“/^([0-9]{2})\/([0-9]{2})\/([0-9]{4})$/”,$\u POST['birth'],$parts)
您使用的
strop
是错误的。检查一下

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

您应该改为使用,例如:

preg_match_all("{^([0-9]{2})/([0-9]{2})/([0-9]{4})$}", $_POST['birthday'], $parts);

您犯了一个致命错误,即变量$part只在第一个if语句中工作。 尝试在第一个if语句后添加以下内容:

$part = strpos("^([0-9]{2})/([0-9]{2})/([0-9]{4})$", $_POST['birthday'])
您还需要尝试:以获得更好的验证


或者使用这个函数:

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

PHP已经有许多不同的验证器。使用checkdate进行验证,而不是使用正则表达式


参考资料:

您需要这个,请使用
{}
格式化代码并使用正确的缩进。此外,我不知道您这样做是否出于好玩/实验的目的,但如果您实际上是在编写人们会使用的合法程序,请使用一个带有许多验证技术的预构建框架,否则你只是在问安全漏洞(以及浪费大量时间)。我这样做是为了练习和学习。它不起作用,它显示警告:preg_match_all()[function.preg match all]:在第15Ah行的C:\xampp\htdocs\signup.php中找不到结尾分隔符“^”,是的,忘记了php正则表达式需要分隔符。纠正
$part = strpos("^([0-9]{2})/([0-9]{2})/([0-9]{4})$", $_POST['birthday'])