1

input/type=hidden フィールドの値に対して「contains」関数を実行する正規表現が必要です。この非表示フィールドには、カンマ区切りの文字列に一意の値が格納されます。

これがシナリオです。
値: "mix" を非表示フィールドに追加する必要があります。カンマ区切りの値として存在しない場合にのみ追加されます。

私の限られた正規表現の知識では、検索が「ミックス」値のすべての出現を返すことを防ぐことはできません。たとえば、hiddenField.val = 'mixer, mixon, mixx' の場合、3 つの単語すべてに「mix」文字が含まれているため、正規表現は常に true を返します。

助けてくれてありがとう

4

4 に答える 4

3

メタキャラクターを使用\bして、単語の境界を設定できます。

var word = "mix";
new RegExp("\\b" + word + "\\b").test(hidden.value);

デモ: http://jsfiddle.net/ztYff/


アップデート。ハードコーディングの代わりに変数を使用する場合に発生する可能性のある問題の正規表現を保護するために (以下のコメントを参照)、word変数内の特殊文字をエスケープする必要があります。考えられる解決策の 1 つは、次の方法を使用することです。

RegExp.escape = function(text) {
    return text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
}

デモ: http://jsfiddle.net/ztYff/1/


更新 2. @Porco の回答に続いて、正規表現と文字列分割を組み合わせて、別の普遍的なソリューションを得ることができます。

hidden.value.split(/\s*,\s*/).indexOf(word) != -1;

デモ: http://jsfiddle.net/ztYff/2/

于 2012-06-01T22:41:53.893 に答える
2
hiddenField.val.split(',').indexOf('mix') >= 0

正規表現を使用することもできます (startofstring OR カンマ + mix + endofstring OR カンマ):

hiddenField.val.match(/(,|^)mix($|,)/)
于 2012-06-01T22:31:39.117 に答える
0
hiddenField.val.match(/^(mix)[^,]*/);
于 2012-06-01T22:32:53.617 に答える
0

どうですか:

/(^|,)\s*mix\s*(,|$)/.test(field.value)

mix文字列の先頭、末尾、またはコンマの間にある場合は、と一致します。リストの各エントリが複数の単語で構成されている可能性がある場合は、を削除することをお勧めします\s*

于 2012-06-01T22:48:12.957 に答える