Переключатель (true) всегда отображает регистр по умолчанию - PullRequest
0 голосов
/ 19 мая 2019

Я сделал программу на javascript, которая вычисляет возраст человека после ввода даты рождения. Проверка возраста работает нормально, но у меня проблемы с выключателем (правда). Я пытаюсь ограничить ввод определенными цифрами, поскольку значение месяца не может превышать 12, а в зависимости от месяца число не может превышать определенную сумму.

Я пытался написать тот же код в операторах if. Он все еще не работает.

do {
    var geboorte_datum = prompt("Voer uw leeftijd in(DD/MM/YYYY)");
    var age = getAge(geboorte_datum);
    var delen = geboorte_datum.split('/');
    var geboorte_dag = delen[0];
    var geboorte_maand = delen[1];
    var geboorte_jaar = delen[2];
    switch (true) {
        case (delen[1] === 1 && delen[0] > 31):
        case (delen[1] === 2 && delen[0] > 28 && (Number.isInteger(delen[2] / 4) === "false")):
        case (delen[1] === 2 && delen[0] > 29 && (Number.isInteger(delen[2] / 4) === "true")):
        case (delen[1] === 3 && delen[0] > 31):
        case (delen[1] === 4 && delen[0] > 30):
        case (delen[1] === 5 && delen[0] > 31):
        case (delen[1] === 6 && delen[0] > 30):
        case (delen[1] === 7 && delen[0] > 31):
        case (delen[1] === 8 && delen[0] > 31):
        case (delen[1] === 9 && delen[0] > 30):
        case (delen[1] === 10 && delen[0] > 31):
        case (delen[1] === 11 && delen[0] > 30):
        case (delen[1] === 12 && delen[0] > 31):
        case (delen[1] > 12):
            alert("U heeft uw geboortedatum verkeerd ingevuld. Probeer het opnieuw.");
            break;
        case (age > 17):
            alert("U heeft nog geen toegang tot deze site.");
            break;
        default:
            alert("Welkom.");
    }
}
while (geboorte_maand === 12 && geboorte_dag > 31 || geboorte_maand === 11 && geboorte_dag > 30 || geboorte_maand === 10 && geboorte_dag > 31 || geboorte_maand === 9 && geboorte_dag > 30 || geboorte_maand === 8 && geboorte_dag > 31 || geboorte_maand === 7 && geboorte_dag > 31 || geboorte_maand === 6 && geboorte_dag > 30 || geboorte_maand === 5 && geboorte_dag > 31 || geboorte_maand === 4 && geboorte_dag > 30 || geboorte_maand === 3 && geboorte_dag > 31 || geboorte_maand === 2 && geboorte_dag > 29 && (geboorte_jaar / 4).isInteger() || geboorte_maand === 1 && geboorte_dag > 31 || geboorte_maand === 2 && geboorte_dag > 29 && ((geboorte_jaar / 4).isInteger() === "false") || geboorte_maand > 12);

и моя попытка с утверждениями if:

    var geboorte_datum = prompt("Voer uw leeftijd in(DD/MM/YYYY)");
    var age = getAge(geboorte_datum);
    var delen = geboorte_datum.split('/');
    var geboorte_dag = delen[0];
    var geboorte_maand = delen[1];
    var geboorte_jaar = delen[2];
    if (delen[1] === 1 && delen[0] > 31) {
        alert("U heeft uw geboortedatum verkeerd ingevuld. Probeer het opnieuw.");
    } else if (age < 18) {
        alert("U heeft helaas nog geen toegang tot deze site.")
    } else {
        alert("Welkom.")
    }
    if (delen[1] === 2 && delen[0] > 28 && (Number.isInteger(delen[2] / 4) === "false")) {
        alert("U heeft uw geboortedatum verkeerd ingevuld. Probeer het opnieuw.");
    } else if (age < 18) {
        alert("U heeft helaas nog geen toegang tot deze site.")
    } else {
        alert("Welkom.")
    }
    if (delen[1] === 2 && delen[0] > 29 && (Number.isInteger(delen[2] / 4) === "true")) {
        alert("U heeft uw geboortedatum verkeerd ingevuld. Probeer het opnieuw.");
    } else if (age < 18) {
        alert("U heeft helaas nog geen toegang tot deze site.")
    } else {
        alert("Welkom.")
    }
    if (delen[1] === 3 && delen[0] > 31) {
        alert("U heeft uw geboortedatum verkeerd ingevuld. Probeer het opnieuw.");
    } else if (age < 18) {
        alert("U heeft helaas nog geen toegang tot deze site.")
    } else {
        alert("Welkom.")
    }
    if (delen[1] === 4 && delen[0] > 30) {
        alert("U heeft uw geboortedatum verkeerd ingevuld. Probeer het opnieuw.");
    } else if (age < 18) {
        alert("U heeft helaas nog geen toegang tot deze site.")
    } else {
        alert("Welkom.")
    }
    if (delen[1] === 5 && delen[0] > 31) {
        alert("U heeft uw geboortedatum verkeerd ingevuld. Probeer het opnieuw.");
    } else if (age < 18) {
        alert("U heeft helaas nog geen toegang tot deze site.")
    } else {
        alert("Welkom.")
    }
    if (delen[1] === 6 && delen[0] > 30) {
        alert("U heeft uw geboortedatum verkeerd ingevuld. Probeer het opnieuw.");
    } else if (age < 18) {
        alert("U heeft helaas nog geen toegang tot deze site.")
    } else {
        alert("Welkom.")
    }
    if (delen[1] === 7 && delen[0] > 31) {
        alert("U heeft uw geboortedatum verkeerd ingevuld. Probeer het opnieuw.");
    } else if (age < 18) {
        alert("U heeft helaas nog geen toegang tot deze site.")
    } else {
        alert("Welkom.")
    }
    if (delen[1] === 8 && delen[0] > 31) {
        alert("U heeft uw geboortedatum verkeerd ingevuld. Probeer het opnieuw.");
    } else if (age < 18) {
        alert("U heeft helaas nog geen toegang tot deze site.")
    } else {
        alert("Welkom.")
    }
    if (delen[1] === 9 && delen[0] > 30) {
        alert("U heeft uw geboortedatum verkeerd ingevuld. Probeer het opnieuw.");
    } else if (age < 18) {
        alert("U heeft helaas nog geen toegang tot deze site.")
    } else {
        alert("Welkom.")
    }
    if (geboorte_maand === 10 && geboorte_dag > 31) {
        alert("U heeft uw geboortedatum verkeerd ingevuld. Probeer het opnieuw.");
    } else if (age < 18) {
        alert("U heeft helaas nog geen toegang tot deze site.")
    } else {
        alert("Welkom.")
    }
    if (delen[1] === 11 && delen[0] > 30) {
        alert("U heeft uw geboortedatum verkeerd ingevuld. Probeer het opnieuw.");
    } else if (age < 18) {
        alert("U heeft helaas nog geen toegang tot deze site.")
    } else {
        alert("Welkom.")
    }
    if (delen[1] === 12 && delen[0] > 31) {
        alert("U heeft uw geboortedatum verkeerd ingevuld. Probeer het opnieuw.");
    } else if (age < 18) {
        alert("U heeft helaas nog geen toegang tot deze site.")
    } else {
        alert("Welkom.")
    }
    if (delen[1] > 12) {
        alert("U heeft uw geboortedatum verkeerd ingevuld. Probeer het opnieuw.");
    } else if (age < 18) {
        alert("U heeft helaas nog geen toegang tot deze site.")
    } else {
        alert("Welkom.")
    }

Я ожидал, что выходные данные будут отображать предупреждения, когда они превышают количество дней или месяцев. Для каждого месяца я добавлял, сколько дней может быть месяц. Однако результат переключения (true) всегда является значением по умолчанию. Код операторов if также не работает.

Ответы [ 2 ]

1 голос
/ 19 мая 2019

Ваши «даты» - это не числа, а строка. Потому что вы используете строгое равенство (===) Так '21'! == 21 тем не мение '21' == 21

Как правило, большинство людей поощряют строгое равенство, поэтому вам, возможно, просто нужно преобразовать строки в число, используя сначала функцию parseInt().

Если вы запустите typeof delen[0], вы должны увидеть, что это строка - вам нужно, чтобы она была числом для работы любого из этого кода.

0 голосов
/ 19 мая 2019

Есть много проблем с вашим кодом!

  • Number.isInteger(delen[2] / 4) === "false" не может работать, потому что вы сравниваете логическое значение со строкой.
  • То же самое для delen[1].

Вы можете простоделать что-то подобное:

function getAge(dateStr) {
  var delen = dateStr.split('/');
  var geboorte_dag = Number(delen[0]);
  var geboorte_maand = Number(delen[1]);
  var geboorte_jaar = Number(delen[2]);

  return new Date().getFullYear() - new Date(geboorte_jaar, geboorte_maand, geboorte_dag).getFullYear(); // Not exactly...
}

function isValidDate(dateStr) {
  var delen = (dateStr || '').split('/');
  var geboorte_dag = Number(delen[0]);
  var geboorte_maand = Number(delen[1]);
  var geboorte_jaar = Number(delen[2]);
  var schrikkel_jaar = Number.isInteger(geboorte_jaar / 4);
    
  return ((geboorte_maand === 1 && geboorte_dag <= 31)
  || (geboorte_maand === 2 && geboorte_dag <= 29 && schrikkel_jaar)
  || (geboorte_maand === 2 && geboorte_dag <= 28 && !schrikkel_jaar)
  || (geboorte_maand === 3 && geboorte_dag <= 31)
  || (geboorte_maand === 4 && geboorte_dag <= 30)
  || (geboorte_maand === 5 && geboorte_dag <= 31)
  || (geboorte_maand === 6 && geboorte_dag <= 30)
  || (geboorte_maand === 7 && geboorte_dag <= 31)
  || (geboorte_maand === 8 && geboorte_dag <= 31)
  || (geboorte_maand === 9 && geboorte_dag <= 30)
  || (geboorte_maand === 10 && geboorte_dag <= 31)
  || (geboorte_maand === 11 && geboorte_dag <= 30)
  || (geboorte_maand === 12 && geboorte_dag <= 31));
}

var geboorte_datum = prompt("Voer uw leeftijd in(DD/MM/YYYY)");

if (!isValidDate(geboorte_datum)) {
  alert("U heeft uw geboortedatum verkeerd ingevuld. Probeer het opnieuw.");
} else if (getAge(geboorte_datum) < 18) {
  alert("U heeft helaas nog geen toegang tot deze site.");
} else {
  alert("Welkom.");
}
...