Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: identyczne znaki w stringu
Forum PHP.pl > Forum > Przedszkole
Indianin
jJak sprawdzic czy string zawiera kilka identycznych znakow polozonych obok siebie (aaaaaby, zzzzzzzzz itp) .?
FiDO
  1. <?php
  2.  
  3. if (preg_match('#(w)1+#', $tekst))
  4. {
  5.   // ..sa takie same znaki obok siebie..
  6. }
  7.  
  8. ?>

To zadziala dla liter, cyfr oraz znaku _
Indianin
Perfect
Ale ... Masz moze pomysl jak to sprawdzic gdy jest wiecej niz dwa identyczne znaki . Chodzi o wyeliminiwanie glupawych nazw userow .
FiDO
Znaczy sie wiecej niz dwa takie same obok siebie ?
Jasne..
  1. <?php
  2.  
  3. if (preg_match('#(w)1{2,}#', $tekst))
  4. {
  5.   // ..sa conajmniej 3 takie same znaki obok siebie
  6. }
  7.  
  8. ?>


PS. to jest troche walka z wiatrakami, automatem wszystkiego nie sprawdzisz.
scanner
Jak to nie sprawdzisz wszystkiego?
Sam właśnie szukam rozwiązania, jak "skompresować" stringi pozbywając się nadmiarowych znaków.
jak na razie, w połtorej godziny po obudzeni się z dwu godzinego snu, wymyśliłem takiego potworka:

  1. <?php
  2. $sString = &#092;"heeellloooooo all :))))))) aaaaaaa77777777 ggggggggggg;;;\";
  3. $sPattern = '#(w)1{2,}#';
  4. if( preg_match($sPattern, $sString, $aFound ) )
  5. {
  6. do
  7. {
  8.  
  9. $sString = str_replace( $aFound[0], $aFound[1], $sString );
  10. }while (preg_match($sPattern, $sString, $aFound ) );
  11. }
  12. echo $sString.'<br />';
  13. ?>
Który wypluwa z siebie:
Cytat
helo all smile.gif)))))) a7 g ;;;

Jak widać, nie przegryza się przez nawiasy i średniki. Trzega by pattern wyedytować, tylko, ze ja się nie znam na RegExepach jeszcze smile.gif

Aha - pomijam kwestię wydajności (na razie).


=======================
Update:

  1. <?php
  2. /**
  3. * @return string
  4. * @param string $sString
  5. * @param int $iAllowedRepeats
  6. * @desc Kompresuje podany ciag znaków skracajac do jednego powtarzajace sie znak
  7. , np. 'aaa' => 'a'.Ilosc znakow dozwolonych (nieskracanych) podajemy jako drugi opcjonalny parametr.
  8. */
  9.  
  10. function compressText( $sString, $iAllowedRepeats = 2 )
  11. {
  12. $sPattern = '#([w|W])1{'.$iAllowedRepeats.',}#';
  13. if( preg_match($sPattern, $sString, $aFound ) )
  14. {
  15. do
  16. {
  17. $sString = str_replace( $aFound[0], $aFound[1], $sString );
  18. }while (preg_match($sPattern, $sString, $aFound ) );
  19. }
  20. return $sString;
  21. }
  22. ?>
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.