我需要一个正则表达式,它对input / type = hidden字段的值执行“contains”函数。此隐藏字段以逗号分隔的字符串存储唯一值。
这是一个场景 值:“mix”需要添加到隐藏字段中。只有当它不以逗号分隔的值存在时才会被添加。
由于我对正则表达式的了解有限,我无法阻止搜索返回“mix”值的所有发生。例如if:hiddenField.val ='mixer,mixon,mixx',正则表达式总是返回true,因为所有三个单词都包含“mix”字符。
提前感谢您的帮助
答案 0 :(得分:3)
您可以使用\b
元字符设置字边界:
var word = "mix";
new RegExp("\\b" + word + "\\b").test(hidden.value);
DEMO: http://jsfiddle.net/ztYff/
UPDATE。为了在使用变量而不是硬编码时保护我们正常表达可能出现的问题(请参阅下面的评论),我们需要转义word
变量中的特殊字符。 One possible solution将使用以下方法:
RegExp.escape = function(text) {
return text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
}
DEMO: http://jsfiddle.net/ztYff/1/
更新2。关注@Porco's answer我们可以将正则表达式和字符串拆分结合起来,以获得另一种通用解决方案:
hidden.value.split(/\s*,\s*/).indexOf(word) != -1;
答案 1 :(得分:2)
hiddenField.val.split(',').indexOf('mix') >= 0
也可以使用正则表达式(startofstring或逗号+混合+ endofstring或逗号):
hiddenField.val.match(/(,|^)mix($|,)/)
答案 2 :(得分:0)
hiddenField.val.match(/^(mix)[^,]*/);
答案 3 :(得分:0)
怎么样:
/(^|,)\s*mix\s*(,|$)/.test(field.value)
匹配mix
,如果它位于字符串的开头或末尾或逗号之间。如果列表中的每个条目都可以包含多个单词,则可能需要删除\s*
。