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

关于错误输入的新手Javascript查询,javascript,Javascript,我正在制作一个简单的提示计算器来帮助自己学习Javascript。我无法解决的问题是如何补偿“不良输入” 在下面的代码中,如果用户在数字输入金额前面加上美元符号$,则结果为NAN function tipAmount(){ var dinner=prompt("How much was dinner?"); result = dinner*.10; alert("Your tip is " +"$"+result ); } 如何解决这个问题。最简单的方法是将输入解析为浮点,然后查看是否返回

我正在制作一个简单的提示计算器来帮助自己学习Javascript。我无法解决的问题是如何补偿“不良输入”

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

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

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

}

如何解决这个问题。

最简单的方法是将输入解析为浮点,然后查看是否返回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");

最简单的方法是将输入解析为浮点,然后查看是否返回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");

根据需要,尝试将输入解析为浮点或整数:

var dinner = parseFloat(prompt("How much was dinner?"));


如果无法将输入解析为数字,此函数将返回0。请根据您的需要尝试将输入解析为浮点或整数:

var dinner = parseFloat(prompt("How much was dinner?"));


如果函数无法将输入解析为数字,则返回0。只需检查值是否为数字-Javascript的isNaN:

if (isNaN(dinner)) {
    alert('Bad number, bub.');
    return;
}

只需检查该值是否为数字-Javascript的isNaN:

if (isNaN(dinner)) {
    alert('Bad number, bub.');
    return;
}

您可以尝试使用正则表达式解析数值:

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*/
表示:一个或多个数字,可能是一个点,后面有其他数字。这意味着,如果例如
晚餐
“$1.23”
价格
将是数字
1.23
。这同样适用于
“$1.23”
“1.23美元”
等-将使用正则表达式定义的模式解析出数字。

您可以尝试使用正则表达式解析出数值:

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*/
表示:一个或多个数字,可能是一个点,后面有其他数字。这意味着,如果例如
晚餐
“$1.23”
价格
将是数字
1.23
。这同样适用于
“$1.23”
“1.23美元”
等-数字将用正则表达式定义的模式解析出来。

或者,如果您想允许用户同时键入数字或开头带有$的金额,您可以检查第一个字符:

if( dinner.charAt(0) == '$' )
{
    dinner = dinner.substring(1);
}

这样,每当用户键入$时,您的应用程序都会将其删除。如果他们键入一个普通数字,它将为您计算小费…

或者,如果您想让用户同时键入两个数字-只需数字或开头带有$的金额,您可以检查第一个字符:

if( dinner.charAt(0) == '$' )
{
    dinner = dinner.substring(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;
}
函数tipAmount(){
var晚餐=提示(“晚餐多少钱?”);
//将“晚餐”转换为数字,去掉所有非数字数据
晚餐=数字(晚餐。替换(/[^0-9\.]+/g,”);
//任何未知数据都将转换为0

如果(晚餐考虑到您使用警报的方法,以下方法将起作用:

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;
}
函数tipAmount(){
var晚餐=提示(“晚餐多少钱?”);
//将“晚餐”转换为数字,去掉所有非数字数据
晚餐=数字(晚餐。替换(/[^0-9\.]+/g,”);
//任何未知数据都将转换为0


如果(晚餐)你想怎么处理?我的问题是加倍作为一种方式来窥探可能发生的事情。所以除了“尽可能简单”我根本不知道。哦,等等。我明白你的意思。我希望美元被忽略!你想怎么处理?我的问题是加倍作为一种方式来窥探可能发生的事情。所以除了“尽可能简单”我只是不知道。哦,等等。我明白你的意思。我希望美元被忽略!它不应该是
/\d*\.?\d*/
,这样你就可以键入
。5
@Adam Rackis:你是对的,但是所有东西都是可选的,它将不匹配任何东西(
一开始就已经匹配了).ahhh-你以前做过…-处理这件事会很痛苦。@Adam Rackis:嗯-我刚刚注意到副作用:)不应该是
/\d*\。?\d*/
这样你就可以输入
.5
@Adam Rackis:你是对的,但是所有的东西都是可选的,它都不会匹配任何东西(
一开始就已经匹配了).ahhh-你以前做过…-处理这件事会很痛苦。@Adam Rackis:嗯-我刚注意到副作用:)挑剔,但你可以用
\d
(数字)代替
0-9
而且
不需要转义。@pimvdb的确如此。他可以很高兴地替换你答案中给出的正则表达式。谢谢。将字符串转换为数字并删除其他字符是我一直在寻找的。不理解语法来实现这一点正是我渴望了解的。谢谢挑剔,但您可以用
\d
(数字)替换
0-9
而且
不需要转义。@pimvdb的确如此。他可以很高兴地替换你答案中给出的正则表达式。谢谢。将字符串转换为数字并删除其他字符是我一直在寻找的。不理解语法来实现这一点正是我渴望了解的。谢谢