【问题标题】:Input validation JavaScript?输入验证 JavaScript?
【发布时间】:2019-06-28 23:33:35
【问题描述】:

我需要询问用户一个提示,但他们只能输入某些单词才能接受答案,如果用户没有用正确的单词回答,它会说它无效并再次提问。 这只能通过使用 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;
    }

}

这是我到目前为止所做的,但它没有验证,所以我做错了什么,只是不确定是什么。

用户只能回答的词是:QueenslandNew South WalesVictoriaTasmaniaNorthern TerritoryWestern AustraliaSouth AustraliaAustralian Capital Territory

【问题讨论】:

  • 您的代码几乎是正确的,只是您不能在需要时使用 return 语句。而不是返回尝试执行操作或根本不做任何事情。
  • 题外话:不要检查每个有效单词,而是将所有单词添加到数组中,然后使用wordsArray.indexOf(stInput) == -1检查数组是否包含键入的单词,如果为真,则表示该单词不在数组中......它使游览代码更清晰和可扩展

标签: javascript validation input


【解决方案1】:

当您编写 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 + ''));
      }
    }

【讨论】:

【解决方案2】:

您从未真正调用过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;
      }

  }

我没有单独检查每个字符串,而是将所有可能的州/领地条目聚集到一个数组中,这样您就可以简单地检查该数组中是否存在用户输入。如果存在,则用户输入有效,否则无效。

此外,我添加了另一个“while”外观,它将继续提示用户输入有效的州或领地,直到他们提供一个,就像您为其他入口点所做的那样。

值得注意的是,此验证区分大小写。也就是说,“Queensland”有效,但“queensland”无效。此外,在提示中选择“取消”也被识别为无效输入。应该处理这些情况。

【讨论】:

  • 感谢您在这里帮助我。这一切都在帮助我学会在这一切上做得更好。
【解决方案3】:

希望这是您正在寻找的,谢谢。

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()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-17
    • 2015-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-29
    相关资源
    最近更新 更多