我正在为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中的第一个或多或少的认真项目。
答案 0 :(得分:1)
好吧,我不知道你叫什么特殊字符,但是我们说这不是普通文本中出现的东西:
//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;
}
}
}
但我强烈怀疑循环方法会比正则表达式慢,后者立即使用内置函数。