Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Jak wykryć duże litery w tekście
Forum PHP.pl > Forum > Przedszkole
oi.
NA swoich stronach mam problem z userami którzy nie przestrzegają regulaminu i dodając treści piszą DUŻYMI LITERAMI
Jak wykryć w przesyłanym tekście, że zawiera same duże litery , by móc to blokować?
sniezny_wilk
Każde pole potraktuj strtolower" title="Zobacz w manualu PHP" target="_manual i wszystkie będą miały małe litery smile.gif
okhan
Chyba najlepiej użyć wyrażeń regularnych.
Ja bym to zrobił na zasadzie...

a. liczę wszystkie znaki
b. liczę znaki pisane wielkimi literami

jeśli znaki pisane wielkimi literami stanowią powiedzmy 70% tekstu - podejmuję odpowiednią akcję

Jak policzyć ilość wielkich liter?
można np. zrobić count z tablicy uzyskanej przez

preg_split ('/[A-Z]/', $subject)
JoShiMa
Sprawdzić tekst funkcją wykorzystującą wyrażenia regularne PERLA z odpowiednim wyrażeniem regularnym chyba to będzie "[(A-Z)ÓĄŚŁŻŹĆŃ\.,(0-9)\t\n\r\f]*" czyli tekst składający się wyłącznie z dużych liter, również polskich, cyfr, kropek i znaków odstępu. Za prawidłowość tego wyrażenie nie ręczę (dopiero się uczę), więc to przetestuj, chyba, że prędzej mnie ktoś wyprostuje.
oi.
Sniezny wilku twoje rozwiazanie jest dobre ale po najmniejszej linii oporu

Okhan, no dobrze mam zmienną :

  1. <?php
  2. $tytul = " ALA MA DUŻEGO KOTA O IMIENIU SPAM i małego psa";
  3. ?>


jak tu teraz wykorzystac tę funkcje:
  1. <?php
  2. preg_split ('/[A-Z]/', $tytul)
  3. ?>

Można tak :?
  1. <?php
  2. $ile=preg_split ('/[A-Z]/', $tytul);
  3. ?>

gdzie $ile wskaże ilośc liter z dużych liter ?
JoShiMa
Sprawdziłam to moje wyrażenie tu:
http://maciek.lasyk.info/index.php?action=regexp_checker
powinno być OK.

Nie preg_split tylko raczej preg_match_all albo preg_match
Kicok
  1. <?php
  2.  
  3. $tytul = " ALA MA DUŻEGO KOTA O IMIENIU SPAM i małego psa";
  4. $count = similar_text( $tytul, strtolower( $tytul ), $percent );
  5.  
  6.  
  7. echo 'Zmienna zawiera ' . ( strlen( $tytul ) - $count ) . ' dużych liter, co stanowi ' . round( 100 - $percent, 1 ) . '% całości.';
  8.  
  9. ?>



Teraz tylko zostaje ci wyznaczyć jakieś rozsądne granice, np. jeśli 70% znaków to duże litery, to nie przepuszczaj tekstu.
Warto też przedtem wywalić białe znaki, cyfry i znaki interpunkcyjne z tekstu, oraz dodatkowo sprawdzać jego długość (jeśli tytuł ma 3 znaki i są to w 100% duże litery, to może to być jakiś skrót, np. "NBP" ).
Ogólnie to zamiast blokowania radziłbym napisać skrypt, który poinformuje jakiegoś człowieka (moderatora, administratora) o podejrzeniu złamania regulaminu.

Uważaj na kodowanie UTF-8 - może zaburzyć wartość procentową. Sprawdź też, czy kod ten będzie wydajny przy długich tekstach.
oi.
Dzieki KICOK aaevil.gif
okhan
oi. : $ile = count(preg_split ('/[A-Z]/', $tytul)) bo on zwraca tablice,

ale sposób Kicok'a będzie zdecydowanie bardziej wydajny smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.