刚开始我的编码之旅。我有这个提示,我试图强迫用户只输入数字。不允许任何其他字符。知道我怎么能这样做吗?
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,那么循环将触发,否则它不会由于某种原因,似乎并非如此。任何帮助将不胜感激:)
答案 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)
,即十进制)。 10
为parseInt("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"