-1

我目前正在为 Twitch 编写一个机器人。
现在我想检查每条消息是否有特殊字符,并检测包含超过 20% 特殊字符的消息。

消息本身是一个变量var msg,如果消息应包含超过 20% 的特殊字符,则应使用命令使用户超时。

这是它应该监听的事件:

event.on("chat", function(user, channel, message) {
        var msg = message.toLowerCase();
        var args = msg.split(" ");

        console.log("<"+user.color+" | "+user.username+" | "+user.special+"> <"+channel+"> "+message)
    });

希望任何人都可以帮助我。这是我的第一个,或多或少,严肃的 JavaScript 项目。

4

1 回答 1

1

tl;博士 Jsfiddle

好吧,我不知道你叫什么特殊字符,但假设它不是出现在普通文本中的东西:

//Regular expression that matches everything except specified
var regexp = /[^a-z0-9 ',\.:!\?]/ig;
//Get number of matches
var num_match = message.match(regexp);
num_match = num_match!=null?num_match.length:0;
//Percentage of unwanted characters:
var perctent_spec;
if(num_match!=null)
   perctent_spec = (num_match/message.length)*100; 
else 
   percent_spec = 0;

当然,您可以循环遍历两个数组:

var chars = message.split("");
var allowed = ["a", "b", "c" ... ];
var count = 0;
for(var i=0,l=chars.length; i<l; i++) {
    count++;
    for(var j=0,l2 = allowed.length; j<l2; j++) {
        if(chars[i]==allowed[i]) {
          count--;
          break;
        }
    }
}

但我强烈怀疑循环方法会比正则表达式慢,后者立即使用内置函数。

于 2014-09-09T23:39:41.760 回答