道歉可能是一个简单的问题,但我是PHP和Javascript的新手。
我在PHP中创建一个登录验证,要求注册用户以DD / MM / YYYY格式输入他们的出生日期,如果以任何其他格式输入日期,则返回错误消息。我不确定如何做到这一点,除了使用preg_match,但这似乎不起作用......
变量:
$DOB = $_POST['DOB'];
$error_message = '';
日期验证段
elseif (!preg_match("/^(0?[1-9]|[12][0-9]|3[01])\/\.- \/\.- \d{2}$/", $DOB))
{
$error_message = 'Invalid Date';
}
错误显示
if ($error_message != '')
{
echo 'Error: '.$error_message.' <a href="javascript: history.back();">Go Back</a>.';
echo '</body> </html>';
exit;
}
else
{
echo'<p><strong>Form Submitted Successfully!</strong></p>';
}
这不是重复,我尝试了其他线程,但没有一个解决方案有效。
答案 0 :(得分:7)
您应该使用的不仅仅是正则表达式。例如,您不应该允许 31/02/2015 之类的内容,因为二月中没有第31个!
我有一个运作良好的功能:
function isDate($string) {
$matches = array();
$pattern = '/^([0-9]{1,2})\\/([0-9]{1,2})\\/([0-9]{4})$/';
if (!preg_match($pattern, $string, $matches)) return false;
if (!checkdate($matches[2], $matches[1], $matches[3])) return false;
return true;
}
首先使用preg_match
检查 DD / MM / YYYY 的正式有效性,抓取 DD , MM 和 YYYY 分成$matches
数组。然后使用内置的PHP函数checkdate
检查日期本身的有效性。
您可以在代码中使用它,例如:
if (!isDate($DOB)) {
$error_message = 'Invalid Date';
}
答案 1 :(得分:4)
你可以在PHP中这样做:
$date=explode("/",$_POST['DOB']);
if(checkdate ($date[1] ,$date[0] ,$date[2]))
{
echo "valid";
}
else
{
echo "invalid";
}
checkdate只有在“/”后面的三个值有效时才返回true,所以如果没有“/”它的无效,就像它们以错误的顺序排列数字一样。
答案 2 :(得分:0)
给定字符串string_explode然后将其部分传递给
bool checkdate ( int $month , int $day , int $year )
很遗憾,如果日期不超过12
,您无法知道用户是否以格式发布了月份和日期