Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Rozpoznanie, czy litery są duże czy małe.
Forum PHP.pl > Forum > Przedszkole
miniol
Czy można w PHP (lub MySQL- bo dane i tak będą zapisane w bazie danych) sprawdzić wielkość liter?

Chodzi mi o to, że jeśli ciąg znaków składa się tylko z dużych liter, to chciałbym to wychwycić. Jeśli ciąg zawiera mieszane litery (zarówno małe jaki duże) lub tylko małe litery, to można go pominąć.
nospor
przepuszczasz ciąg przez funkcję, która zmienia wszystko na duze litery. Jesli ciąg po zmianie jest taki sam jak ciąg przed zmianą, znaczy, że były tam tylko duże litery.
miniol
Cytat(nospor @ 4.04.2012, 15:27:08 ) *
przepuszczasz ciąg przez funkcję, która zmienia wszystko na duze litery. Jesli ciąg po zmianie jest taki sam jak ciąg przed zmianą, znaczy, że były tam tylko duże litery.

Hehe no faktycznie dość logiczne i proste rozwiązanie smile.gif
Dzięki!
redeemer
Ja bym proponował wyrażenie regularne :-)
  1. if(preg_match('/[a-z]/', $string)){
  2. // ciag zawiera male litery
  3. } else {
  4. // nie zawiera
  5. }
miniol
Cytat(redeemer @ 4.04.2012, 15:30:35 ) *
Ja bym proponował wyrażenie regularne :-)
  1. if(preg_match('/[a-z]/', $string)){
  2. // ciag zawiera male litery
  3. } else {
  4. // nie zawiera
  5. }

W tym przypadku działa tylko jeśli ciąg jest w całości napisany z małych liter. Jeśli są zarówno małe jaki duże, to nie działa tak jakbym tego chciał.

Ja zastosowałem takie coś i działa tak jak powinno.
  1. $tekst = 'Abcd';
  2. $tekst2= strtoupper($tekst);
  3. if ($tekst === $tekst2) {
  4. echo 'Litery są duże.';
  5. }
  6. else {
  7. echo 'Litery są różne.';
  8. }
nospor
Jak ty w ogóle nie myślisz.... zamien a-z na A-Z
  1. if(preg_match('/[A-Z]+/', $string)){
  2. // ciag zawiera tylko duże litery
  3. } else {
  4. // nie zawiera
  5. }
Crozin
@redeemer, @nospor: preg_match - i nagle z jednego problemu autorowi wątku robią się dwa.

@miniol: Powinieneś raczej użyć mb_strtoupper; strtoupper może w pewnych warunkach nie rozpoznać (i w konsekwencji nie zamienić) polskich znaków: http://ideone.com/Dxi22
nospor
Crozin w pierwszym moim poście podałem normalne rozwiązanie. Kontynuowałem wątek z preg_match tylko i wyłącznie dlatego bo ktoś inny go zaczął a autor miał z nim nadal problemy. Nie rozumiem skąd więc ten przytyk w moją stronę.
Crozin
@nospor: Tak właściwie to chciałem tylko zaznaczyć jak beznadziejnym pomysłem jest tutaj wyrażenie regularne - bo mimo prostego zadania obaj podaliście błędne wyrażenia. wink.gif
nospor
Oj, czepiasz się szczegółów. Ja poprawiłem jedynie logikę ze nie a-z a A-Z.
No ale proszę, poprawne w pełni wyrażenie: /^[A-Z]+$/
ps: nie zawiera polskich liter tongue.gif
redeemer
Dodam tylko, że rozwiązanie z wyrażeniem regularnym jest dużo szybsze wink.gif
Crozin
@redeemer: Nie powiem, zdziwiłem się widząc, że PCRE jest szybsze od mb_strtoupper (od strtoupper jest już wolniejsze).

Ale tak to już jest, że w PHP złe rozwiązanie jest nieraz lepsze, bo korzysta w większym stopniu z elementów natywnych (napisanych w C) niż PHP-owskich. :]
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.