Фильтр мата для флеша (AS3)

Для Тира сделал фильтр нецензурной лексики, а то молокососы в чате достают, матерятся как сапожники, может еще кому пригодится:

package com.grom 
{
	/**
	 * ...
	 * @author Alexander Sorokin aka Grom  - http://alexsorokin.ru/
	 */
	public class WordsFilter 
	{
	private static var words:Array = ["fuck","пидар", "мудак", "чмо", "дибил", "говн", "дерьм",
		"тварь", "еблан", "уебашка", "уебатор", "мудила", "пидрила", "мудак", "гавноеб", "ебан", "ебать",
		"хер", "пизда", "хуй", "йух", "блять", "блеать", "блиать", "блядь", "блядина", "говноеб", "уебище", "пиздопроебище",
		"хуйло", "хуило", "ахуел", "иди на хуй", "иди нахуй", "нахер", "иди впизду", "ебалан", "4мо", "сученок", "сучара",
		"гнида", "ебал в рот", "ебал врот", "ебаный", "ебанный ", "хуйня", "херня", "по хуй", "похуй", "ебись",
		"придурок", "пидофил", "педофил", "мудоеб", "ёбырь", "ебантяй", "сучка", "дура", "дегенерат", "ебучий"];
				
		public function WordsFilter() 
		{
			
		}
		
		static public function filter(str:String):String
		{
			var ttyrt:String = str;
			
			var t:Function = function(s:String, s1:String):int { var d:int = (s.length - s1.length); return d > 0 ? 1 : (d==0 ? 0:-1); }
			words.sort(t);
			var rr:RegExp = new RegExp('(' + words.join('|') + ')', "igm");
						
			var str:String = ttyrt.toLowerCase();
			for (var i:int = 0; i < words.length; i++) 
			{
				var w:String = words[i];
				
				var idx:int = 0;
				do {
					idx = str.indexOf(w, idx);
					if (idx == -1) break;
					ttyrt = ttyrt.substr(0, idx) + w.replace(/./ig,'*') + ttyrt.substr(idx + w.length);
					str =     str.substr(0, idx) + w.replace(/./ig,'*') + str.substr(idx + w.length);
					}while (true);
			}
			
			return ttyrt;
		}
	}

}

Код написан по-быстрому на коленке, да и ActionScript - говно редкостное. Так что принимаются предложения по оптимизации.

Кстати, менять при помощи RegExp у меня не вышло - не понимает сравнение без учета регистра.

Comments