Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Wykrycie kilku takich samych znaków w tekście
Forum PHP.pl > Forum > Przedszkole
Szunaj85
Mam pytanie,
Jak wykryć kilka takich samych znaków występujących pod rząd w tekście/zmiennej za pomocą warunku?
Czyli żeby nie wykrywało max 2 znaków koło siebie, ale już 3 lub więcej tak.
Np.: "Ala ma kota", "Ala ma koota" nie będą brane pod uwagę, ale "Ala ma kooota", "Ala ma koooota" już tak.
pyro
  1. <?php
  2. // dla przykładu z "o"
  3.  
  4. $a = preg_match_all('|o{3,}|', $tekst, $found);
  5. ?>
Szunaj85
Cytat
Jak wykryć kilka takich samych znaków występujących pod rząd w tekście/zmiennej za pomocą warunku?
Czyli żeby nie wykrywało max 2 znaków koło siebie, ale już 3 lub więcej tak.
Np.: "Ala ma kota", "Ala ma koota" nie będą brane pod uwagę, ale "Ala ma kooota", "Ala ma koooota" już tak.
Nie wiem czy dobrze wytłumaczyłem problem. Chodzi mi o warunek (if). Jeżeli w polu treść nie znajdują się 3 takie same znaki koło siebie nic nie rób, w przeciwnym razie wyświetl komunikat.
  1. <?php
  2. if (...(..., $tresc)){
  3.  $tresc.='W treści znajdują się powtarzające się znaki';
  4.  }
  5. ?>
I chodzi o różne znaki. Litery, liczby, znaki interpunkcyjne, itd. W takim wypadku wystarczy chyba wpisać kropkę. Pyro próbowałem wzorować się na tym co napisałeś, ale nie chce mi działać prawidłowo. sadsmiley02.gif
erix
Szczerze mówiąc, lepiej byłoby użyć sprawdzania pisowni, a nie wymyślać koło na nowo. tongue.gif

A jeśli już usilnie chcesz, to skorzystaj z tego, co napisał ~pyro, ale użyj modyfikatora /e i korzystaj z tego np. tak:

  1. <?php
  2. function notify(){
  3.   throw new Exception();
  4. }
  5.  
  6. try{
  7.  
  8.   for($a=97;$a<=122;$a++){
  9.      preg_replace('|'.chr($a).'{3,}|ie', 'notify()', $str);
  10.   }
  11.  
  12. }catch(Exception $ex){
  13.   // buuuu!
  14. }
  15. ?>

Ostrzegam, pisane z palca.
230005
Od sprawdzania tekstu w taki sposób na jakim ci zależy są wyrażenia regularne i to jest właśnie to co koledzy wyżej napisali :] .
Szunaj85
erix dopisałem pare linijek kodu żeby wyświetlał komunikat. To wyrażenie regularne działa, ale zauważyłem, że tylko na litery.
Jak napiszę cyfry czy znaki to już nie wyświetla mi komunikatu. Próbowałem określić grupę znaków w kodzie wyrażenia typu
[a-zA-Z0-9], [a-zA-Z0-9ąćęłńóśźżĄĆĘŁŃÓŚŹŻ(inne znaki)], itp czy też prościej wpisać ('.') zastępujący każdy pojedynczy znak. Niestety nie działa albo mi coś nie wychodzi.
I jeszcze jedno.
Jakie znaczenie mają te liczby w pętli for? Do czego służą? co_jest.gif
  1. <?php
  2. for($a=97;$a<=122;$a++){
  3. ?>
Swoją drogą z chęcią doczytam o wyrażeniach regularnych jak będę miał trochę czasu.
oraz
Co to za wyjątek ta zmienna $ex? co_jest.gif
  1. <?php
  2. }catch(Exception $ex){
  3. ?>
Krótko mówiąc czego nie wiedziałem poczytałem, ale chciałbym dobrze zrozumieć ten kod. smile.gif
erix
Cytat
itp czy też prościej wpisać ('.') zastępujący każdy pojedynczy znak. Niestety nie działa albo mi coś nie wychodzi.

Nie prościej, gdyż wpisując kropkę będzie łapało trzy dowolne znaki, które mogą być różne.

Cytat
Jakie znaczenie mają te liczby w pętli for? Do czego służą?

Wikipedia: ASCII

Cytat
Krótko mówiąc czego nie wiedziałem poczytałem, ale chciałbym dobrze zrozumieć ten kod.

Skoro pytasz, jaki wyjątek, to nie doczytałeś. winksmiley.jpg

Funkcja wywołana jako callback wypluwa wyjątek, a ten kod go łapie. winksmiley.jpg

~230005 - Twoja wypowiedź wniosła coś nowego do dyskusji?
Szunaj85
Erix, no teraz to ma ręce i nogi, już wszystko rozumiem i nawet nie muszę kombinować z ('.'). Chociaż raz (odkąd wiele razy odpisywałeś na moje pytania) mi pomogłeś. yahoo.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.