jQuery检查String是否包含Word

时间:2011-12-19 02:20:47

标签: javascript jquery

我正在开发一个应用程序,您可以单击用户名将其添加到回复列表中。 如果已添加用户名,则不会再次添加用户名。 我遇到的问题是如果添加了用户@assassin,并且我尝试添加用户@ass,它会发现@ ass-assin并认为已经添加了@ass。 这是我的代码:

$('#mentions a.mention_user').live('click', function(e){if($('textarea#message').val().toLowerCase().search('@'+$(this).text().toLowerCase()) < 0){
        $('textarea#message').val('@'+$(this).text()+' '+$('textarea#message').val());
    }
    e.preventDefault();
});

提前致谢!

编辑:它将匹配用户名的文本将类似于:@user @joe @adam这是一条消息@someone

4 个答案:

答案 0 :(得分:2)

假设空格字符对于用户名是非法的。 将textarea消息字符串拆分为由空格分隔的数组,并根据建议的用户名检查每个数组元素。

$('#mentions a.mention_user').live('click', function(e) { 
    if ($.inArray('@'+$(this).text(),$('textarea#message').val().split(' '))) { 
        $('textarea#message').val('@'+$(this).text()+' '+$('textarea#message').val()); 
    }
    e.preventDefault(); 
});

答案 1 :(得分:0)

将要添加的项目的长度与匹配的项目的长度进行比较。如果长度相等,则添加的项目已经存在。

答案 2 :(得分:0)

很难在没有完整代码的情况下进行测试,但是使用正则表达式进行搜索,并确保它具有不是AZ,az,0-9(以及任何其他有效的用户名字符)的字符后可能会执行此操作

类似的东西:

$('#mentions a.mention_user').live('click', function(e){if(($('textarea#message').val().toLowerCase() + ' ').search(
    new RegExp("'@'+$(this).text().toLowerCase() + '[^A-Za-z0-9\-_]')
) < 0){
        $('textarea#message').val('@'+$(this).text()+' '+$('textarea#message').val());
    }
    e.preventDefault();
});

答案 3 :(得分:0)

假设分隔符始终是空格字符,您可以这样做:

$('#mentions a.mention_user').live('click', function(e){
   var taMsg = $('#message'),
       userName = '@'+$(this).text()+' ';
   if( (taMsg.val().toLowerCase() + ' ').indexOf(userName) != -1) {
      taMsg.val(userName + taMsg.val());
   }
   e.preventDefault();
}); 

这个想法是,如果你在用户名列表的末尾添加一个空格,那么你可以在它之后搜索一个带有空格的特定用户名。

我还更新了代码以缓存消息textarea的jQuery对象,而不是重复三次。请注意,如果您选择的ID为'#message',那么(假设该ID是唯一的)您不需要'textarea'前缀。

此外,由于您实际上并未使用正则表达式,因此我已切换为.indexOf()而不是.search()