Javascript - 强制特定数据类型输入或仅接受输入

时间:2017-10-03 19:34:15

标签: javascript

刚开始我的编码之旅。我有这个提示,我试图强迫用户只输入数字。不允许任何其他字符。知道我怎么能这样做吗?

var num = prompt("Enter number");

我已经尝试了

var num=Number(prompt("Enter number"));

我也试过制作这样的循环,但我知道提示返回一个字符串:

while (typeof(num)!=='number'{
        alert("You did not enter a number);
        var num=prompt("Enter number"));}

我也尝试过:

var num= Number(prompt("Enter number"));
while (num===/==NaN){
        alert("You did not enter a number);
        var num=Number(prompt("Enter number"));}
alert("You did enter a number");   

在Number提示中输入任何非数字字符会导致NaN,所以我认为如果每次输入非数字字符时答案都是NaN,那么循环将触发,否则它不会由于某种原因,似乎并非如此。任何帮助将不胜感激:)

3 个答案:

答案 0 :(得分:1)

var answer = prompt("Enter a number:");
while (!/^[0-9]+$/.test(answer)) {
    alert("You did not enter a number.");
    answer = prompt("Enter a number: ");
}
alert("You entered a number.");

这是如何工作的?

/^[0-9]+$/被称为正则表达式。 ^指定字符串的开头,$指定字符串的结尾,[0-9]指定数字,+指定one or more occurrences of。给定的正则表达式表示"从字符串的开头到字符串的结尾,应该有一个或多个数字出现,没有别的。" nothing else部分是因为我们不接受除数字之外的任何内容。如果我们是,我们会把它们放在正则表达式中。

/^[0-9]+$/.test返回一个布尔值,具体取决于字符串是否与给定的正则表达式匹配。

答案 1 :(得分:0)

提示通常不是输入的最佳选择,因为它们不允许任何控制,但如果你对while循环没问题,这可能是一个很好的解决方案:

class CMySpinButton : public CSpinButtonCtrl
{
 DECLARE_DYNAMIC(CMySpinButton)

  public:
  CMySpinButton();
  virtual ~CMySpinButton();

  protected:
  DECLARE_MESSAGE_MAP()
  virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
};

var answer = prompt("Enter number") while (answer !== parseInt(answer, 10).toString()) { alert("Please enter only numbers!"); answer = prompt("Enter number"); } “从字符串中提取”数字(第二个参数是基数,在我们的例子中是parseInt(answer, 10),即十进制)。 10parseInt("5", 10)5也为parseInt("5foo", 10)

基本上,如果用户在5中输入整数,则prompt为真。我们使用parseInt(answer, 10).toString() === answer将结果Number转换为String,这样我们就可以将它与用户输入的实际值进行比较,在.toString()的情况下,它总是存储为String。

我们可以使用此逻辑来检查用户实际是否输入了整数。

那就是说,我真的建议你使用类似prompt的东西,这样可以更容易/更直接的方式“强制执行”数字输入。

答案 2 :(得分:-1)

所以,除了发布的正则表达式解决方案之外,这里还有@ namanyayG,Barmar和@ evolutionxbox的回答:

var num = Number(prompt("Enter whole number"));

while (num !== parseInt(num).toString()) {
    alert("Please enter only numbers!");
    num = prompt("Enter number");
}

OR表示浮点数:

var num = prompt("Enter whole number");

while (num !== parseFloat(num).toString()) {
    alert("Please enter only numbers!");
    num = prompt("Enter number");
}

OR

var num = Number(prompt("Enter whole number"));

while (isNaN(num)!=="false"){
    alert("You did not enter a whole number");
    var num = prompt("Enter number");
}

对于我未知的原因,isNaN(num)!=="false"isNaN(num)==/==="true"

不同