我有一组逗号分隔的字符串,如果任何字符串不是数值,我需要插入“(1)”。
"stack(2),flow,over(4),temp(7)" Here insert default value to flow(1)
"stack(2),flow(3),over(4),temp" Here insert default value to temp(1)
"stack,flow(3),over,temp" Here insert default value to stack(1),over(1),temp(1)
我有验证代码来验证并在需要时插入默认值。请帮助我如何在括号内插入默认值。
JavaScript 函数:
var case1 = "stack(2),flow(2),over(4),temp(7)"; // - true
var case2 = "stack(2),flow(3),over(4),temp(k)"; // - false
var case3 = "stack(2),flow(2),over(4),temp(0"; // - false
var case4 = "stack(2),flow(2),over(,temp)"; // - false
var case5 = "stack(2),flow(2),over(4)temp(8)"; // - false
var case6 = "stack(1),flow(7),over,temp"; // - true
var case7 = "stack(1),flow(7),OVER,Temp"; // - true
var case8 = "stack(1),flow(7),over_r,temp_t"; // - true
function testCases(str)
{
var pattern = /^[a-z]+(?:\(\d+\))?(?:,[a-z]+(?:\(\d+\))?)*$/
return pattern.test(str);
}
上述函数适用于 jsfiddle 中的验证
最佳答案
tl;博士
使用String.prototype.split
和String.prototype.join
来处理字符串的每个部分。
详细信息
如果您想对字符串应用自定义修复,则需要将其拆分为多个部分,然后对其进行处理。工作完成后,将所有部分连接在一起。
实现
使用Array.prototype.map
(警告:与 IE 8 及更低版本不兼容):
Demo on JSFiddle .
function testCases(str) {
return str.split(',').map(function(s) {
if (s.match(/^[a-z]+\(\d+\)$/i)) {
// string is valid
return s;
} else {
// you can do processing here based on the failure reason
return s + '(1)';
}
}).join(',');
}
使用for
循环(IE8兼容):
function testCases(str) {
var parts = str.split(',');
var i = parts.length;
while (i--) {
var s = parts[i];
if (!s.match(/^[a-z]+\(\d+\)$/i)) {
// string is invalid
// you can do processing here based on the failure reason.
parts[i] = s + '(1)';
}
}
return parts.join(',');
}
关于javascript - 如何在逗号分隔的字符串中插入默认值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20685715/