关于错误输入的新手Javascript查询

时间:2011-12-16 21:18:09

标签: javascript

我正在制作一个简单的小费计算器来帮助自己学习Javascript。我无法解决的问题是如何弥补错误的输入"。

在下面的代码中,如果用户在数字输入金额前加上美元符号$,则结果为NAN

function tipAmount(){
var dinner=prompt("How much was dinner?");
result = dinner*.10;

alert("Your tip is " +"$"+result );

}

我该如何解决这个问题。

6 个答案:

答案 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"price1.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);
}

这样,只要用户输入$,您的应用就会删除它。如果他们输入正常数字,它会为你计算一个小费...