/// <summary>
        /// Cenzuriranje na nedozvoleni sodrzini vo ramki na postavena poraka.
        /// </summary>
        /// <param name="poraka">Poraka koja kje bide cel na proverka.</param>
        /// <returns>Objekt od tip RegExNas, koj vo sebe go sodrzi rezultatot od proverkata.</returns>
        public IRegEx ProveriPorakaSodrzina(String poraka)
        {
            RegExNas rezultat = new RegExNas(poraka);
            Regex reg = new Regex(@"^[-0-9аАбБвВгГдДѓЃеЕжЖзЗѕЅиИјЈкКлЛљЉмМнНњЊоОпПрРсСтТќЌуУфФхХцЦчЧџЏшШa-zA-Z,\.!/:;?'+*)(\[\]\{\} ^_^]{1,50}$");

            const String CensoredText = "^_^";
            const String PatternTemplate = @"\b({0})(s?)\b";
            const RegexOptions Options = RegexOptions.IgnoreCase;

            String[] badWords = new[] { "глуп", "глупа", "глупав", "глупава", "глупави", "вол", "мрсул", "г'з", "лајно", "лајна", "лигуш", "мрсули", "курва", "кур", "пичка", "пички", "ороспија", "сељак", "гомно", "гомна", "курви", "ороспии", "простак", "простачка", "курвар", "гад", "цицка", "цицки", "дебил", "дебили", "недоделкан", "недоквакан", "ебе", "ебаго", "ебем", "пичка ти", "пичкати", "мамето", "мамата", "материна", "гз", "идиот" };

            Boolean sodrziZbor = false;
            foreach (String zbor in badWords)
            {
                if (poraka.ToLower().Contains(zbor))
                {
                    sodrziZbor = true;
                    break;
                }
            }
            if (sodrziZbor == true)
            {
                IEnumerable<Regex> badWordMatchers = badWords.Select(x => new Regex(string.Format(PatternTemplate, x), Options));

                String input = poraka;
                String output = badWordMatchers.Aggregate(input, (current, matcher) => matcher.Replace(current, CensoredText));
                poraka = output;
                rezultat.IzmenetVlez = poraka;
            }

            if (reg.IsMatch(poraka))
            {
                if (sodrziZbor == false)
                {
                    rezultat.uspeh = true;
                }
                else
                {
                    rezultat.uspeh = false;
                    rezultat.poraka = "Пораката е со несоодветна содржина";
                }

            }
            else
            {
                rezultat.poraka = "Пораката содржи некои специјални знаци";
                rezultat.IzmenetVlez = "F";
            }
            return rezultat;
        }
 /// <summary>
 /// Funkcijata ima za cel da go opredeli tipot na validatorot i spored toa da vrati soodveten 
 /// regularen izraz.
 /// </summary>
 /// <param name="v">Tip na validator.</param>
 /// <param name="o">Objekt nad koj moze da se pravi validacija.</param>
 /// <returns>Regularen izraz, za opredeleniot tip na validator.</returns>
 public IRegEx Produce(ValidatorEnum v, object o)
 {
     RegExNas regex = new RegExNas();
     ProveriKorisnik korValidator;
     ProveriMaterijal matValidator;
     ProveriPoraka porValidator;
     if (v == ValidatorEnum.Korisnik_UserID)
     {
         korValidator = new ProveriKorisnik();
         regex.FunkcijaValidiraj = new RegExNas.ValidateObject(korValidator.ProveriUserID);
     }
     else if (v == ValidatorEnum.Korisnik_Lozinka)
     {
         korValidator = new ProveriKorisnik();
         regex.FunkcijaValidiraj = new RegExNas.ValidateObject(korValidator.ProveriLozinka);
     }
     else if (v == ValidatorEnum.Korisnik_Email)
     {
        korValidator = new ProveriKorisnik();
        regex.FunkcijaValidiraj = new RegExNas.ValidateObject(korValidator.ProveriEmail);
     }
     else if (v == ValidatorEnum.Korisnik_Ime)
     {
         korValidator = new ProveriKorisnik();
         regex.FunkcijaValidiraj = new RegExNas.ValidateObject(korValidator.ProveriIme);
     }
     else if (v == ValidatorEnum.Korisnik_Prezime)
     {
         korValidator = new ProveriKorisnik();
         regex.FunkcijaValidiraj = new RegExNas.ValidateObject(korValidator.ProveriPrezime);
     }
     else if (v == ValidatorEnum.Materijal_Naslov)
     {
         matValidator = new ProveriMaterijal();
         regex.FunkcijaValidiraj = new RegExNas.ValidateObject(matValidator.ProveriNaslov);
     }
     else if (v == ValidatorEnum.Materijal_Opis)
     {
         matValidator = new ProveriMaterijal();
         regex.FunkcijaValidiraj = new RegExNas.ValidateObject(matValidator.ProveriOpis);
     }
     else if (v == ValidatorEnum.Poraka_Sodrzina)
     {
         porValidator = new ProveriPoraka();
         regex.FunkcijaValidiraj = new RegExNas.ValidateObject(porValidator.ProveriPorakaSodrzina);
     }
     return regex;
     
 }
 /// <summary>
 /// Proverka na korektnost korisnicka lozinka.
 /// Dozvolena struktura: site karakteri, so dolzina nad 8 karakteri so zadolzitelno koristenje na eden ili poveke broevi.
 /// </summary>
 /// <param name="lozinka">Korisnicka lozinka koj kje bide cel na proverka.</param>
 /// <returns>Objekt od tip RegExNas, koj vo sebe go sodrzi rezultatot od proverkata.</returns>
 public IRegEx ProveriLozinka(String lozinka)
 {
     RegExNas rezultat = new RegExNas(lozinka);
     Regex reg = new Regex(@"^(\w|\d){8,50}$");
     Regex reg2 = new Regex(@"\d");
     if (reg.IsMatch(lozinka) && reg2.IsMatch(lozinka))
     {
         rezultat.uspeh = true;
     }
     else
     {
         rezultat.poraka = "Лозинката треба да има минимум 8, а максимум 50 карактери и мора да содржи барем една цифра";
     }
     return rezultat;
 }
       /// <summary>
       /// Proverka na korektnost korisnicki ID.
        /// Dozvolena struktura: alfabeta (a-z A-Z), brojki, _, so dolzina od minimum 5 a maksimum 45 karakteri.
       /// </summary>
       /// <param name="userID">Korisnicki ID koj kje bide cel na proverka.</param>
        /// <returns>Objekt od tip RegExNas, koj vo sebe go sodrzi rezultatot od proverkata.</returns>
       public IRegEx ProveriUserID(String userID)
       {
           RegExNas rezultat = new RegExNas(userID);
           Regex reg = new Regex(@"^[a-zA-Z0-9_]{5}(\w){0,45}$");
           if (reg.IsMatch(userID))
           {
               rezultat.uspeh = true;
           }
           else
           {
               rezultat.poraka = "Корисничкото име треба да содржи минимум 5 карактери од латиницата, бројки или долна црта, а максимум 45 карактери";
           }

           return rezultat;

       }
       /// <summary>
       /// Proverka na korektnost korisnicki email.
       /// Dozvolena struktura: [email protected]
       /// </summary>
       /// <param name="mail">Korisnicki email koj kje bide cel na proverka.</param>
       /// <returns>Objekt od tip RegExNas, koj vo sebe go sodrzi rezultatot od proverkata.</returns>
       public IRegEx ProveriEmail(String mail)
       {
           RegExNas rezultat = new RegExNas(mail);
           Regex reg = new Regex(@"^(([^<>()[\]\\.,;:\s@\""]+"
                        + @"(\.[^<>()[\]\\.,;:\s@\""]+)*)|(\"".+\""))@"
                        + @"((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}"
                        + @"\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+"
                        + @"[a-zA-Z]{2,}))$");
           if (reg.IsMatch(mail))
           {
               rezultat.uspeh = true;
           }
           else
           {
               rezultat.poraka = "Внесете валидна email адреса";
           }

           return rezultat;
       }
        /// <summary>
        /// Cenzuriranje na nedozvoleni sodrzini vo ramki na opisot za postaven materjal.
        /// </summary>
        /// <param name="opis">Opis koj kje bide cel na proverka.</param>
        /// <returns>Objekt od tip IRegEx, koj vo sebe go sodrzi rezultatot od proverkata.</returns>
        public IRegEx ProveriOpis(String opis)
        {
           
            RegExNas rezultat = new RegExNas(opis);
            Regex reg = new Regex(@"^[-0-9аАбБвВгГдДѓЃеЕжЖзЗѕЅиИјЈкКлЛљЉмМнНњЊоОпПрРсСтТќЌуУфФхХцЦчЧџЏшШ,\.!/:;?'+*)(\[\]\{\} ^_^]{1,500}$");

            const String CensoredText = "^_^";
            const String PatternTemplate = @"\b({0})(s?)\b";
            const RegexOptions Options = RegexOptions.IgnoreCase;

            String[] badWords = new[] { "глуп", "глупа", "глупав", "глупава", "глупави", "вол", "мрсул", "г'з", "лајно", "лајна", "лигуш", "мрсули", "курва", "кур", "пичка", "пички", "ороспија", "сељак", "гомно", "гомна", "курви", "ороспии", "простак", "простачка", "курвар", "гад", "цицка", "цицки", "дебил", "дебили", "недоделкан", "недоквакан", "ебе", "ебаго", "ебем", "пичка ти", "пичкати", "мамето", "мамата", "материна", "гз", "идиот" };
            Boolean sodrziZbor = false;
            foreach (String zbor in badWords)
            {
                if (opis.ToLower().Contains(zbor))
                {
                    sodrziZbor = true;
                    break;
                }
            }
            if (sodrziZbor == true)
            {
                IEnumerable<Regex> badWordMatchers = badWords.Select(x => new Regex(string.Format(PatternTemplate, x), Options));

                String input = opis;
                String output = badWordMatchers.Aggregate(input, (current, matcher) => matcher.Replace(current, CensoredText));
                opis = output;
                rezultat.IzmenetVlez = opis;
                rezultat.poraka = "Описот содржи несоодвтени зборови и истите беа заменети.";
            }
            if (reg.IsMatch(opis))
            {
                rezultat.uspeh = true;
            }
            else
            {
                rezultat.uspeh = false;
                rezultat.poraka = "Описот може да содржи максимум 500 кирилични букви.";
            }
            return rezultat;
        }
       /// <summary>
       /// Proverka na korektnost korisnicko ime.
       /// Dozvolena struktura: kirilicna azbuka, so dolzina od minimum 1 a maksimum 30 karakteri.
       /// </summary>
       /// <param name="ime">Korisnicko ime koj kje bide cel na proverka.</param>
       /// <returns>Objekt od tip RegExNas, koj vo sebe go sodrzi rezultatot od proverkata.</returns>

       public IRegEx ProveriIme(String ime)
       {
           RegExNas rezultat = new RegExNas(ime);
           Regex reg = new Regex(@"^[аАбБвВгГдДѓЃеЕжЖзЗѕЅиИјЈкКлЛљЉмМнНњЊоОпПрРсСтТќЌуУфФхХцЦчЧџЏшШ]{1,30}$");
           if (reg.IsMatch(ime))
           {
               rezultat.uspeh = true;
           }
           else
           {
               rezultat.poraka = "Внесете го вашето име со кирилична поддршка (дозволени се максимум 30 букви)";
           }
           return rezultat;
       }