2012-01-27 4 views
2

アンカーの.text()をドラッグしてドラッグしたときに入力に追加します。'string1'が 'string1、string2、string3、.. stringn'にあるかどうかを確認する方法

事は、私は彼らがsepatedと繰り返さないコンマ必要があるということです、私は値が既に'bla, ble, string1'あるときに、入力に'string 1'を追加するために抱き合わせていた場合、私は重複することがないようにする必要

どうしますか?

私の最初の推測は、爆発を','で行い、それをforループと組み合わせることですが、実際にはそれはまったく最適化されていないと思います。

+0

をarray-ませんか?もちろん、あなたの正規表現を構築するときにも、最初か最後の要素かを考慮する必要があります。 –

+1

ところで、大きな文字列を保存する必要がある理由はありますか?代わりに、 "exploded"配列を操作しやすくするのはどうですか? – hugomg

+0

http://stackoverflow.com/questions/890782/javascript-function-inarray – Stefan

答えて

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/ –

+0

@ToniMichelCaubet、更新された参照してください詐欺チェックのための答え。 –

+0

@epascarello、良い点 - 更新されました。 –

0

あなたのフィドルに基づいて、

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

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

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

私はREGのEXPの必要性を参照するか、または2つのコンマの間に `string1`に一致するように正規表現を使用しないのはなぜ

var t=input.value, s= //text string; 
if(t.indexOf(s)==-1)t.value=t+ ', '+s; 
関連する問題