为什么还要归虚?

时间:2015-03-26 19:50:13

标签: php date

有谁知道为什么这个函数仍然返回false?

功能页面:

function validateDate($date)
{
  $array = array();
  $array = explode("-", $date);
  if (strlen($array[1]) != 1 || strlen($array[1]) != 2) {
    return false;
  } else if (strlen($array[0] != 1 || strlen($array[0] != 2))) {
    return false;
  } else if (strlen($array[2] != 4)) {
    return false;
  } else if (checkdate($array[1], $array[0], $array[2]) == false) {
    return false;
  } else {
    return true;
  }
}

验证页面:

if (validateDate($_POST['birth']) == false) {
    ?><img class="inputCheckImg" src="<?= ICON ?>cross.png"><a class="inputCheckCross">This is not a valid date.</a><?
}

输入为:8-5-199608-05-1996 我试过了两个,但两个都不起作用。

5 个答案:

答案 0 :(得分:2)

在你的第一次测试中:

 if (strlen($array[1]) != 1 || strlen($array[1]) != 2) {
    return false;

每个字符串的长度不等于1,或者不等于2.也就是说,长度为1的字符串将在测试的第二部分失败,而长度为2的字符串将使第一部分失败。将运营商更改为&&

 if (strlen($array[1]) != 1 && strlen($array[1]) != 2) {
    return false;

检查其他测试是否存在类似错误。

答案 1 :(得分:1)

我把它归功于Hobo Sapiens和TheChafing。

但是我改变了一件事。

而不是!=我使用了<>

那就是现在:

function validateDate($date)
{
$array = array();
$array = explode("-", $date);
if (strlen($array[1]) < 1 && strlen($array[1]) > 2) {
    return false;
  } else if (strlen($array[0] < 1 && strlen($array[0] > 2))) {
    return false;
  } else if (strlen($array[2] != 4)) {
    return false;
  } else if (checkdate($array[1], $array[0], $array[2]) == false) {
    return false;
  } else {
    return true;
  }
}

答案 2 :(得分:0)

你的strlen有一个错位的关闭括号

strlen($ array [2])!= 1

答案 3 :(得分:0)

在你的if语句中:

if (strlen($array[1]) != 1 || strlen($array[1]) != 2) {
    return false;
} 

您正在检查该元素是否为!= 1 OR!= 2。它不会等于两者,因此其中一个将评估为true,导致函数返回false。

据我所知,你可能想要使用&amp;&amp;无论如何,那里的运营商。

答案 4 :(得分:0)

我不经常使用PHP,但我很好奇为什么Kris Zani被低估了。

给我

      } else if (strlen($array[0] != 1 || strlen($array[0] != 2))) {
        return false;
      } 

看起来很糟糕地回到了地狱。在我看来应该是:

   if (strlen($array[0]) != 1 || strlen($array[0]) != 2)