Проверка ввода JavaScript? - PullRequest
       44

Проверка ввода JavaScript?

0 голосов
/ 26 апреля 2019

Мне нужно запросить у пользователя подсказку, но он может ввести только определенные слова, чтобы он мог принять ответ. Если пользователь не отвечает с правильными словами, он говорит, что он недействителен и снова задает вопрос.
Это должно быть сделано только с использованием javascript.

var entering = confirm('Confirm to add state or territory');
if (!entering) {
    return;
} else {
    while (true) {
        stInput = prompt('Enter state or territory');

        function validateUserChoice(stInput) {
            if (stInput !== "Queensland" && stInput !== "New South Wales" && stInput !== "Victoria" && stInput !== "Tasmania" && stInput !== "Northern Territory" && stInput !== "Western Australia" && stInput !== "South Australia" && stInput !== "Australian Capital Territory") {
                alert("invalid state or territory");
            } else {
                return false;
            }
        }
        populationInput = parseInt(prompt('Enter population for ' + stInput + ''));

        while (isNaN(populationInput)) {
            alert('Your input was invalid');
            populationInput = parseInt(prompt('Enter population for ' + stInput + ''));
        }
        changeInput = parseFloat(prompt('Enter growth rate for ' + populationInput + ''));

        while (isNaN(changeInput)) {
            alert('Your input was invalid');
            changeInput = parseFloat(prompt('Enter growth rate for ' + populationInput + ''));
        }

        break;
    }

}

Это то, что я сделал до сих пор, но это не проверка, поэтому я сделал что-то не так, просто не знаю, что.

Слова, на которые пользователь может ответить только: Queensland, New South Wales, Victoria, Tasmania, Northern Territory, Western Australia, South Australia, Australian Capital Territory.

Ответы [ 3 ]

2 голосов
/ 26 апреля 2019

Когда вы пишете function validateUserChoice (stInput) вы объявляете функцию, а не вызываете ее.Поэтому вам следует объявить вашу функцию и вызвать ее как validateUserChoice (stInput) или не использовать функцию вообще.

Следуя фрагменту кода, я полагаю, вы намеревались сделать:

    var entering = confirm('Confirm to add state or territory');
    if (!entering) {
      return;
    } else {
      stInput = prompt('Enter state or territory');
      while (stInput !== "Queensland" && stInput !== "New South Wales" && stInput !== "Victoria" && stInput !== "Tasmania" && stInput !== "Northern Territory" && stInput !== "Western Australia" && stInput !== "South Australia" && stInput !== "Australian Capital Territory") {
        //stay in loop while stInput is not equal any of the strings
        alert("invalid state or territory");
        stInput = prompt('Enter state or territory');
      }
      populationInput = parseInt(prompt('Enter population for ' + stInput + ''));

      while(isNaN(populationInput)) {
        alert('Your input was invalid');
        populationInput = parseInt(prompt('Enter population for ' + stInput + ''));
      }
      changeInput = parseFloat(prompt('Enter growth rate for ' + populationInput + ''));

      while(isNaN(changeInput)) {
        alert('Your input was invalid');
        changeInput = parseFloat(prompt('Enter growth rate for ' + populationInput + ''));
      }
    }
1 голос
/ 26 апреля 2019

Вы никогда не вызываете функцию validateUserChoice(stInput).Вот измененная версия вашего кода:

  var entering = confirm('Confirm to add state or territory');
  if (!entering) {
    return;
  } else {
      while (true) {
        stInput = prompt('Enter state or territory');

        // validate the state/territory and continue to prompt the user
        // until they enter correct data.
        while(!validateUserChoice(stInput)) {
            alert("invalid state or territory"); 
            stInput = prompt('Enter state or territory');
        }

        function validateUserChoice(stInput) {
            // put all valid entries into an array
            var validInputs = [
                "Queensland",
                "New South wales",
                "Victoria",
                "Tasmania",
                "Northern Territory",
                "Western Australia",
                "South Australia",
                "Australian Capital Territory"
            ]

            // if the user's input exists in the array the index will be > -1, otherwise the users
            // input is invalid.
            return validInputs.indexOf(stInput) > -1;
       }
        populationInput = parseInt(prompt('Enter population for ' + stInput + ''));

        while(isNaN(populationInput)) {
            alert('Your input was invalid');
            populationInput = parseInt(prompt('Enter population for ' + stInput + ''));
        }
        changeInput = parseFloat(prompt('Enter growth rate for ' + populationInput + ''));

        while(isNaN(changeInput)) {
            alert('Your input was invalid');
            changeInput = parseFloat(prompt('Enter growth rate for ' + populationInput + ''));
        }

        break;
      }

  }

Вместо того, чтобы проверять каждую строку в отдельности, я собрал все возможные записи состояния / территории в массив, что позволяет просто проверить наличиепользовательский ввод в этом массиве.Если он существует, то пользовательский ввод действителен, в противном случае он недействителен.

Кроме того, я добавил еще один вариант «пока», который будет продолжать запрашивать у пользователя действительное состояние или территорию до тех пор, пока они не предоставят одно, очень похожее наВы сделали для других точек входа.

Стоит отметить, что эта проверка чувствительна к регистру.То есть «Квинсленд» действителен, а «Квинсленд» - нет.Кроме того, выбор «Отмена» в приглашении также считается неверным вводом.Эти сценарии, вероятно, должны быть обработаны.

0 голосов
/ 26 апреля 2019

Надеюсь, это то, что вы ищете, спасибо.

function validate()
{
var entering = prompt("Confirm to add state or territory");
var populationInput='',changeInput='',stInputchangeInput='';
        if (entering) {
          stInput = prompt('Enter state or territory');
          if (stInput != "Queensland" && stInput != "New South Wales" && stInput != "Victoria" && stInput != "Tasmania" && stInput != "Northern Territory" && stInput != "Western Australia" && stInput != "South Australia" && stInput != "Australian Capital Territory") {
                alert("invalid state or territory"); 
                 
          } 
          
          else {
                   
       populationInput = parseInt(prompt('Enter population for ' + stInput + ''));

         while(isNaN(populationInput)) {
                
                alert('Your input was invalid');
                populationInput = parseInt(prompt('Enter population for ' + stInput + ''));
                    
               }
                changeInput = parseFloat(prompt('Enter growth rate for ' + populationInput + ''));

                while(isNaN(changeInput)) {
                alert('Your input was invalid');
                changeInput = parseFloat(prompt('Enter growth rate for ' + populationInput + ''));
                }

           }
           console.log('State :'+stInput)
           console.log('Population :'+populationInput)
           console.log('Growth Rate :'+changeInput)
       }
     else if(entering !== null)
     validate()
}
validate()
...