2012-01-27 75 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; 
相關問題