Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Anty caps-lock
Forum PHP.pl > Forum > Przedszkole
Dominator
Witajcie
Napisałem mały skrypt, który sprawdza czy ktoś pisze z caps-locka. Mam takie jedno pytanie - czy dobrze on jest napisany?

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html lang="pl">
  3. <head>
  4. <title>CapsLock Checker</title>
  5. </head>
  6. <body>
  7. <form action="index.php" method="POST">
  8. Napisz coś: <input type="text" name="string"><br>
  9. <input type="submit" name="SendData">
  10. </form>
  11. </body>
  12. </html>
  13.  
  14. <?php
  15. @$_string = $_POST["string"];
  16. $_stringCL = strtoupper($_string);
  17.  
  18. if(isset($_POST["SendData"]))
  19. {
  20. similar_text($_string, $_stringCL, $p);
  21. if($p >=50)
  22. {
  23. echo "Proszę o wyłączenie caps locka podczas pisania";
  24. }
  25. else
  26. {
  27. echo "OK";
  28. }
  29. }
  30. ?>
Aqu
Generalnie tak, z tym że ja zwiększyłby te 50%, np. "Co?" zaliczy do napisanych caps-lockiem, a nie powinno. wink.gif
!*!
A nie prościej z automatu zmniejszyć litery, niż bawić się w detekcję? I wywal @ z kodu.
Michael2318
Według mnie lepiej by było użyć ucfirst. Jeśli ten string może składać się z więcej niż jednego zdania, np.:
  1. $string = 'ALA MA KOTA. KOT MA ALE.';

Wtedy rozkładasz sobie ten string na części ($tab = explode('.', $string)), potem zliczasz ile tych zdań jest ($ile = count($tab)-1;) i tworzysz pętlę for, w której każde, a jedno zdanie filtrujesz funkcją ucfirst.
W zliczaniu -1 dlatego, że jeśli ostatnie zdanie zakończy się kropką, to po tej kropce już nic nie ma.

EDIT:
Teraz dostrzegłem, że Ty chcesz tylko SPRAWDZIĆ czy ktoś pisze z caps-lockiem, a nie zamienić litery na małe, tam gdzie to zbędne. W takim razie możesz taką samą metodą jak wyżej zaprezentowałem tylko na zasadzie porównania zdań prawidłowe i to podane przez usera:
  1. if ( $string == ucfirst($string) )
  2. {
  3. echo 'dobrze';
  4. }

itd. z tym że to nie wyłapie Ci np. formy grzecznościowej, czy też sytuacji, gdzie duża litera powinna być użyta, np.:
Bardzo Cię lubię. gdzie Cię to forma grzecznościowa, pisana z dużej litery np. w przypadku listów.
No ale nie będę bawił się w śledczego, sam wiesz do czego Ci to jest potrzebne i czy takie sytuacje mogą się zdrażyć.
PS. Może zamiast sprawdzać czy jest caps-lock, lepiej po prostu samemu zamienić te litery na małe, tak jak to powinno być? smile.gif
Dominator
Cytat(!*! @ 7.04.2013, 14:28:43 ) *
A nie prościej z automatu zmniejszyć litery, niż bawić się w detekcję? I wywal @ z kodu.


Obczaiłem manuala i jakoś to wyszło biggrin.gif

  1. function bigtosmall($_string){
  2. $_male = array('a', 'b', 'c', 'd', 'e', 'ę' ,'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z');
  3. $_duze = array('A', 'B', 'C', 'D', 'E', 'Ę', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z');
  4. $zamiana = str_replace($_duze, $_male, $_string);
  5. return $zamiana;
  6. }
  7. echo ucfirst(bigtosmall(("Kochamy PHP")));


Czy da radę zrobić tak: $tablica = array("a" => "A", "b" => "B"); ?

--
Jak usunę @ to dostanę Notice.
Posio
jaki notice ? Gdyby było wszystko dobrze , to byś nie dostawał...
Dominator
To ja inny kod testowałem, żadnego Notice nie ma smile.gif
!*!
Dominator - tylko że w PHP są już do tego gotowe funkcje. strtolower i strtoupper ewentualnie jeśli potrzebujesz mb_strtolower i mb_strtoupper
sowiq
Nie rozumiem dlaczego ktoś chciałby na siłę zmieniać wielkość liter w zdaniach funkcją ucfirst. A co jeśli chciałbym coś PODKREŚLIĆ w mojej wypowiedzi, albo napisać jakiś skrót typu "WTF"? IMO takie działanie NIE MA sensu! wink.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.