考虑下面的脚本..
$('#accessories').editable({
validate: function(value) {
// solution will be placed here
}
});
如果变量'value'的字符串值为“RUST-PROOFING(2),SPOILER(1),ALARM(2),SIDE-SKIRT(1)”,我怎么能总结(用括号括起来)数字(2)(1)(2)(1)来自'value'变量。
答案 0 :(得分:0)
看看这个FIDDLE
我留给你添加一些异常,比如数字是字符串中的最后一个,因为我的代码不会查找它而不会添加它。
你所要做的就是循环字符串,检查它是否是数字,如果是,将它添加到var并继续循环,当下一个char不是数字时,添加你已构建的数字。 / p>
for (var i = 0; i < str.length; i++) {
if (isNumber(str[i])) {
strNumber += str[i];
} else if (strNumber != "") {
retVal += Number(strNumber);
strNumber = "";
}
}
答案 1 :(得分:0)
尝试以下代码。首先设置正则表达式以查找字符串中的数字,这将返回一个匹配数组,然后您可以将此数组传递给自定义函数,该函数将数组中的所有数字相乘。
var str = "RUST-PROOFING (2),SPOILER (1),ALARM (2),SIDE-SKIRT (1)";
var re = /[\d+]/g //Match only numbers (along the whole string)
var matches = str.match(re);
var total = multiply(matches); //Pass your array of matches to your multiply function;
alert(total); //4
function multiply(arr) { //Multiplies all numbers in an array and returns the total value;
var num = 0;
for(var i = 0, len = arr.length; i < len; i++) {
num += parseInt(arr[i]);
}
return num;
}
查看fiddle
答案 2 :(得分:0)
谢谢你们(特别是对Shryme和Mark)..这是一个总结...希望这将有助于像我这样的新人..
$('#accessories').editable({
validate: function(value) {
$ntot = add(value.toString());
$('#npoints').editable('setValue', $ntot);
}
});
function add(str) {
var retVal = 0;
var strNumber = "";
for (var i = 0; i < str.length; i++) {
if (isNumber(str[i]) && (str[i-1]=="(" || str[i+1]==")")) {
strNumber += str[i];
} else if (strNumber != "") {
retVal += Number(strNumber);
strNumber = "";
}
}
return retVal;
}
function isNumber(n) {
if (n == "") return false;
return !isNaN(n);
}