2012-01-27 68 views
2

我追加锚,以输入的.text()当其拖放到它。如何检查是否“字符串1”是在“字符串1,字符串,STRING3 .. stringn”

的事情是,我需要他们逗号sepated和不重复:

如果我绑添加'string 1'到输入时的值已经'bla, ble, string1',我需要防止被复制,

你会怎么做?

我的第一个猜测是,使通过','的爆炸,并用结合它的循环,但我不认为这真的是优化的。

+0

为什么不使用正则表达式来两个逗号之间的匹配'string1'?当然,在构建正则表达式时,你需要考虑它是第一个还是最后一个元素。 – 2012-01-27 14:03:44

+1

顺便说一句,有一个很好的理由,你需要存储一个大字符串?为什么不保持更容易操作“爆炸”数组呢? – hugomg 2012-01-27 14:13:30

+0

http://stackoverflow.com/questions/890782/javascript-function-inarray – Stefan 2012-01-27 14:15:10

回答

2

基本思路

function addParameter(str, param) { 
    var re = new RegExp("[^,]\\s?" + param + "[,$]","g"); 
    if(!re.test(str)) { 
     str += ((str.length>0) ? ", " : "") + param; 
    } 
    return str; 
} 

var orgStr = "abc, def, hij"; 

//This exists so it will not be added 
var newStr = addParameter(orgStr, "def"); 
console.log(newStr); 

//This does not exist so it will be added to the end 
newStr = addParameter(orgStr, "xyz"); 
console.log(newStr); 

解释的正则表达式

  • [^,]\\s? - 说比赛开始字符串或逗号后跟一个可选的空格字符
  • param - 你的字符串相匹配传入
  • [,$] - 说匹配一个逗号或字符串的结尾。
0

转换现有的CSV字符串数组,你的附加价值,然后将其转换回字符串:

//Create an array from the CSV list 
var myVals = $("#YourElement").val().split(","); 
var isDupe = false; 

for(var i = 0; i < myVals.length; i++) { 
    if(myVals[i].indexOf("YourNewValue") != -1) { 
     isDupe = true; 
     break; 
    } 
} 

//use .push() to append your value to the end of the array 
if(!isDupe) { 
    myVals.push("YourNewValue"); 

    //Invoking .toString() on an array creates a CSV list 
    $("#YourElement").val(myVals.toString()); 
} 

这里的a working fiddle

+0

,但事情是,我试图防止这种情况:http://jsfiddle.net/sc9fq/2/ – 2012-01-27 14:09:03

+0

@ToniMichelCaubet,请参阅更新答案为欺骗检查。 – 2012-01-27 14:13:06

+0

@epascarello,好点 - 更新。 – 2012-01-27 14:15:33

0

根据您的小提琴即可;

var myVals = $("#YourElement").val().split(","); 
var wantToAdd = "cakey"; 

if ($.inArray(wantToAdd, myVals) === -1) 
    myVals.push(wantToAdd); 

$("#YourElement").val(myVals.join(",")); 
0

我没有看到REG EXP需要或基于阵列

var t=input.value, s= //text string; 
if(t.indexOf(s)==-1)t.value=t+ ', '+s; 
相关问题