我正在制作一个简单的小费计算器来帮助自己学习Javascript。我无法解决的问题是如何弥补错误的输入"。
在下面的代码中,如果用户在数字输入金额前加上美元符号$
,则结果为NAN
。
function tipAmount(){
var dinner=prompt("How much was dinner?");
result = dinner*.10;
alert("Your tip is " +"$"+result );
}
我该如何解决这个问题。
答案 0 :(得分:2)
您可以尝试使用正则表达式解析数值:
var match = dinner.match(/\d+\.?\d*/); // parse with a regular expression
if(!match) { // not able to parse
alert("wrong");
}
var price = +match[0]; // convert to a number
result = price * .10;
正则表达式/\d+\.?\d*/
表示:一个或多个数字,可能还有一个跟随其他数字的点。这意味着如果是dinner
为"$1.23"
,price
为1.23
。同样适用于"$ 1.23"
或"1.23 dollar"
等 - 该数字将使用正则表达式定义的模式进行解析。
答案 1 :(得分:1)
最简单的方法是将输入解析为float,并查看是否返回NaN。
if (isNaN(parseFloat(dinner)))
alert("Bad Input")
请注意,45.2WWW
将返回45.2,因此上述内容将通过。
如果你想确定用户输入的内容是一个数字,你可以这样做:
var str = '3.445';
var num = parseFloat(str);
if (isNaN(num) || str.length !== num.toString().length)
alert("Bad Input");
答案 2 :(得分:1)
尝试根据您的需要将输入解析为float或integer:
var dinner = parseFloat(prompt("How much was dinner?"));
或
var dinner = parseInt(prompt("How much was dinner?"));
此函数返回0是否无法将输入解析为数字
答案 3 :(得分:1)
鉴于您使用警报的方法,以下方法将起作用:
function tipAmount() {
var dinner=prompt("How much was dinner?");
//convert "dinner" to a number, stripping out any non numeric data
dinner = Number(dinner.replace(/[^0-9\.]+/g,""));
//any unknown data will convert to 0
if(dinner <= 0) {
alert("Please enter a valid amount");
return false;
}
var result = dinner*.10;
alert("Your tip is " +"$"+result );
return true;
}
请提示更多!
答案 4 :(得分:0)
只需检查值是否为数字 - Javascript&#39; s isNaN:
if (isNaN(dinner)) {
alert('Bad number, bub.');
return;
}
答案 5 :(得分:0)
或者,如果您想允许用户同时输入两者 - 只需输入数字或金额,您可以检查第一个字符:
if( dinner.charAt(0) == '$' )
{
dinner = dinner.substring(1);
}
这样,只要用户输入$,您的应用就会删除它。如果他们输入正常数字,它会为你计算一个小费...