Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Anty caps-lock
Dominator
post
Post #1





Grupa: Zarejestrowani
Postów: 565
Pomógł: 15
Dołączył: 11.10.2010

Ostrzeżenie: (20%)
X----


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. ?>
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 8)
Aqu
post
Post #2





Grupa: Zarejestrowani
Postów: 279
Pomógł: 58
Dołączył: 14.07.2012

Ostrzeżenie: (0%)
-----


Generalnie tak, z tym że ja zwiększyłby te 50%, np. "Co?" zaliczy do napisanych caps-lockiem, a nie powinno. wink.gif

Ten post edytował Aqu 7.04.2013, 13:23:24
Go to the top of the page
+Quote Post
!*!
post
Post #3





Grupa: Zarejestrowani
Postów: 4 298
Pomógł: 447
Dołączył: 16.11.2006

Ostrzeżenie: (0%)
-----


A nie prościej z automatu zmniejszyć litery, niż bawić się w detekcję? I wywal @ z kodu.


--------------------
Nie udzielam pomocy poprzez PW i nie mam GG.
Niektóre języki programowania, na przykład C# są znane z niezwykłej przenośności (kompatybilność ze wszystkimi wersjami Visty jest wiele warta).
Go to the top of the page
+Quote Post
Michael2318
post
Post #4





Grupa: Zarejestrowani
Postów: 651
Pomógł: 116
Dołączył: 3.06.2012
Skąd: Lędziny

Ostrzeżenie: (0%)
-----


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

Ten post edytował Michael2318 7.04.2013, 15:30:00
Go to the top of the page
+Quote Post
Dominator
post
Post #5





Grupa: Zarejestrowani
Postów: 565
Pomógł: 15
Dołączył: 11.10.2010

Ostrzeżenie: (20%)
X----


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.
Go to the top of the page
+Quote Post
Posio
post
Post #6





Grupa: Zarejestrowani
Postów: 417
Pomógł: 44
Dołączył: 23.06.2011

Ostrzeżenie: (0%)
-----


jaki notice ? Gdyby było wszystko dobrze , to byś nie dostawał...
Go to the top of the page
+Quote Post
Dominator
post
Post #7





Grupa: Zarejestrowani
Postów: 565
Pomógł: 15
Dołączył: 11.10.2010

Ostrzeżenie: (20%)
X----


To ja inny kod testowałem, żadnego Notice nie ma smile.gif
Go to the top of the page
+Quote Post
!*!
post
Post #8





Grupa: Zarejestrowani
Postów: 4 298
Pomógł: 447
Dołączył: 16.11.2006

Ostrzeżenie: (0%)
-----


Dominator - tylko że w PHP są już do tego gotowe funkcje. strtolower i strtoupper ewentualnie jeśli potrzebujesz mb_strtolower i mb_strtoupper

Ten post edytował !*! 8.04.2013, 08:49:25


--------------------
Nie udzielam pomocy poprzez PW i nie mam GG.
Niektóre języki programowania, na przykład C# są znane z niezwykłej przenośności (kompatybilność ze wszystkimi wersjami Visty jest wiele warta).
Go to the top of the page
+Quote Post
sowiq
post
Post #9





Grupa: Zarejestrowani
Postów: 1 890
Pomógł: 339
Dołączył: 14.12.2006
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 20.08.2025 - 13:29