2016-03-15 46 views
0

我试图根据某些纸盒尺寸的输入动态计算音量。如何使用Javascript/JQuery检查字符串的格式是10 * 10 * 10,然后进行数学计算

例如a对于尺寸为10cm x 10cm x 10cm的纸箱,用户在文本输入中输入10 * 10 * 10。

然后,我的javascript会检查输入是否与此模式相匹配,然后执行数学运算并用结果填充另一个输入。 10×10×10 = 1000.

我想我需要使用正则表达式,我没有太多的经验。下面的代码在比赛阶段停止工作(无效的正则表达式:/ d + * d + * d + /:没有重复)尽管我很确定我不知道我在做什么。

任何人都可以帮忙吗?

carton_dimensions=$(this).val(); 

var pattern = "(\d+)\*(\d+)\*(\d+)";  
var result = carton_dimensions.match(pattern); 


if(result){ 

    volume=result[0]*result[1]*result[2]; 

} 
+1

使用正则表达式文字符号:'var pattern = /(\ d +)\ *(\ d +)\ *(\ d +)/;'。请参阅[* Javascript正则表达式文字和构造函数*之间的差异](http://stackoverflow.com/questions/7964916/differences-between-javascript-regexp-literal-and-constructor)。 –

+0

'Nothing to repeat'被抛出,因为JS RegExp不允许量化量词(如'+ *')。 –

回答

1

首先,pattern是worngly宣布,它应该是没有"/

var pattern = /(\d+)\*(\d+)\*(\d+)/; 

而且,你正在寻找的结果是索引1,2和3:

volume = result[1] * result[2] * result[3]; 

所以,你的最终代码必须是这样的:

carton_dimensions = $("input").val(); 

var pattern = /(\d+)\*(\d+)\*(\d+)/;  
var result = carton_dimensions.match(pattern); 

if(result){ 
    volume = result[1] * result[2] * result[3]; 
} 

这里是一个JSFiddle与一个工作的例子。

2
"(\d+)\*(\d+)\*(\d+)" 
^     ^

是一个字符串文字。你需要的是一个regex literal

/(\d+)\*(\d+)\*(\d+)/ 
^     ^

或者您可以使用RegExp构造函数,但你必须要处理的字符串常量中转义特殊字符,所以等同于你想让你的正则表达式使用方法:

new RegExp("(\\d+)\\*(\\d+)\\*(\\d+)") 
+0

由于模式不是动态的,因此使用构造函数符号没有意义。如果模式是用户定义的,那么这是必须的。 –

+0

@WiktorStribiżew,绝对。我提到它只是为了展示替代方案,而不是一个建议。 – zzzzBov

0

对于计算,你可以使用JavaScript的eval这样的:

var answer = eval(result[0] + '*' + result[1] + '*' + result[2]);

而且由于您正在验证输入,您应该是安全的。

相关问题