关于错误输入的新手Javascript查询
我正在制作一个简单的提示计算器来帮助自己学习Javascript。我无法解决的问题是如何补偿“不良输入” 在下面的代码中,如果用户在数字输入金额前面加上美元符号关于错误输入的新手Javascript查询,javascript,Javascript,我正在制作一个简单的提示计算器来帮助自己学习Javascript。我无法解决的问题是如何补偿“不良输入” 在下面的代码中,如果用户在数字输入金额前面加上美元符号$,则结果为NAN function tipAmount(){ var dinner=prompt("How much was dinner?"); result = dinner*.10; alert("Your tip is " +"$"+result ); } 如何解决这个问题。最简单的方法是将输入解析为浮点,然后查看是否返回
$
,则结果为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的确如此。他可以很高兴地替换你答案中给出的正则表达式。谢谢。将字符串转换为数字并删除其他字符是我一直在寻找的。不理解语法来实现这一点正是我渴望了解的。谢谢