如何在PHP中验证$ _GET [“year”]中的一年?

时间:2010-12-15 00:44:11

标签: php

我有一个PHP日历,可以根据月份和年份生成日历。我使用$ _GET [“year”]。因此,它出现在页面的URL中。因此,用户可以输入任何一年。如何验证他们输入的年份是一年(如2010年)而不是随机输入(如2t8e7sjj2)?

我想出了如何验证这样的月份:

$m = $_GET["month"];

if($m!=1 && $m!=2 && $m!=3 && $m!=4 && $m!=5 && $m!=6 && $m!=7 && $m!=8 && $m!=9 && $m!=10 && $m!=11 && $m!=12)
{
$m = date("m");
}

但是我不能用年份来做这件事(因为这一年可能是任何数字)。 另外,还有更好的方法来验证除上述之外的月份吗?

感谢。

7 个答案:

答案 0 :(得分:5)

尝试http://php.net/manual/en/function.checkdate.php

if (checkdate($_GET['month'], 1, $_GET['year'])) ... okay

答案 1 :(得分:3)

除了必须是正整数之外,你对年份有什么限制?

关于您的月份验证(也可能是您的第一年),您应该检查数字范围,例如

$m = ctype_digit($_GET['month']) ? (int) $_GET['month'] : 0;
if ($m >= 1 && $m <= 12) {
    // month is valid
}

答案 2 :(得分:2)

是的,您可以像这样验证月份:

$month = intval($_GET['month']);
if ($month >= 1 && $month <= 12) {
    // ...
}

你甚至不需要核实这一年;只需使用intval()

清除它

http://php.net/intval

答案 3 :(得分:1)

if (is_numeric($_GET['year']) && in_array($_GET['year'], range(1900,2100)))

if (is_numeric($_GET['month']) && in_array($_GET['month'], range(1,12)))

答案 4 :(得分:0)

我会做类似的事情:

$m = intval($_GET['month']);
$y = intval($_GET['year']);
if($m < 1 || $m > 12 || $y < 1900 || $y > 2100) echo "bad input!";

答案 5 :(得分:0)

2件事。

1st:你可以在php中使用pasre_url()方法来确保没有无效的格式。

第二:匹配一年/月(因为一年必须是4位数字),可以使用正则表达式轻松验证它们。因为我不喜欢信息来源我学到了什么......看看这里验证日期。

http://www.regular-expressions.info/dates.html

如果你需要,我可以为你写.php,但从现在开始应该很容易。

答案 6 :(得分:0)

您可以使用它来检查(月,年)

<?

// define vars
$months = array();
$years = array();

// create new array with months values
for($i=1;$i<=12;$i++)
    array_push($months,$i);

// create new array with years values ex: begin with year 1930 to 2011
for($i=1930;$i<=2011;$i++)
    array_push($years,$i);

// Check Values
if(in_array($_GET['m'],$months))
{   $m = $_GET['m'];    }
else
{   $m = date("m"); }

if(in_array($_GET['y'],$years))
{   $y = $_GET['y'];    }
else
{   $y = date("Y"); }

?>