Skocz do zawartości

sprawdzenie pierwszego i ostatniego znaku ciągu


Mich@ł

Rekomendowane odpowiedzi

Mam ciąg znaków składających się z liter, cyfr i myślnika czyli np. abc-123. Muszę zro bić sprawdzanie takiego ciągu czy na początku i na końcu nie znajduje się myslnik jak również czy nie jest on powtorzony czyli --.

Na razie obmyśliłem sobie że dany ciąg rozbije (za pomocą explode) na pojedyncze znaki i wtedy pierwsza i ostatnio będę mógł sprawdzić. tak samo czy w danym ciągu nie znajdują się 2 lub więcej myslnikow pod rząd jednakże może jest jakieś prostsze rozwiązanie? Jakaś funkcja php :>?

Michał Kryński
Zapraszam na moje forum akwarystyczne  ;-) 

 

Odnośnik do komentarza
Udostępnij na innych stronach

Warto nauczyć się preg_match i wyrażeń regularnych.

$txt = '-abc9--';
if (preg_match('/^-+/', $txt)) echo ('znaleziono myslnik(i) na poczatku<br>');
if (preg_match('/-+$/', $txt)) echo ('znaleziono myslnik(i) na koncu<br>');
if (preg_match('/-{2,}/', $txt)) echo ('znaleziono dwa lub wiecej myslnikow<br>');

A jeżeli łańcuch powinien mieć postać "litery+myslnik+liczba", to najłatwiej sprawdzić to przez:

if (preg_match('/^[a-zA-Z]+-[0-9]+$/', $txt))
 echo 'lancuch OK';
else
 echo 'lancuch nieprawidlowy';

and

Odnośnik do komentarza
Udostępnij na innych stronach

Na razie obmyśliłem sobie że dany ciąg rozbije (za pomocą explode) na pojedyncze znaki
A może dany ciąg juz jest rozbity? :)

Sprawdź

$string='Mich@ł';
echo $string[0].$string[strlen($string)-1];

a jak chcesz zredukować ilość myslinków do jednego i usunąć z poczatku i końca to

$string=preg_replace('/[\-]+/', '-', $string);
$string=trim($string,'-');

.

Odnośnik do komentarza
Udostępnij na innych stronach

yavaho, nie wiedziałem że w ten sposób można rozbić ciąg ;) Zawsze używałem explode i teraz widzę że to był błąd ;)

Skorzystam ze sposobu k0rnik bo właśnie o to chodziło :)

Dobrze że założyłem temat na forum bo mój sposób wprawdzie też był oparty na wyrażeniach regularych jednakże bardziej na około ;)

Dzięki za pomoc :)

Będę musiał podszkolić się jeszcze jeżeli chodzi o wyrażenia regularne ;)

Michał Kryński
Zapraszam na moje forum akwarystyczne  ;-) 

 

Odnośnik do komentarza
Udostępnij na innych stronach

Ja to bym jednak każdemu kto chce sie nauczyć podstaw programowania to zalecił bym przymusowa reedukację w postaci przeczytania choć jedenj ksiązki z zakresu podstaw , a może nawet nie podstaw a fundamentów.

ŁAŃCUCH = TABLICA ZNAKÓW INDEKSOWANA OD [0]

Rozbijanie explode stringa wydaje mi się lekko mowiąc marnotrastwem energii elektrycznej i przyczynianiem sie do ocieplenia klimatu.

Odnośnik do komentarza
Udostępnij na innych stronach

Tak samo jak marnotrawstwem energii elektrycznej i przyczynianiem się do ocieplenia klimatu. Jest używanie wyrażeń regularnych do sprawdzania czy na końcu i na początku stringa jest myślnik, zamiast jednego "if", to jest jak strzelanie do wróbla z armaty.

Odnośnik do komentarza
Udostępnij na innych stronach

yavaho, nie wiedziałem że w ten sposób można rozbić ciąg
Ja też kiedyś nie wiedziałem :)

I wlaśnie przypomniało mi się że jeszcze czegoś nie wiem w tym temacie więc zapytam.

Dlaczego funkcja count() w przypadku stringu zwraca wartość 1 i nie podaje maksymalnej ilości elementów w tablicy?

.

Odnośnik do komentarza
Udostępnij na innych stronach

W manualu jest wszystko wyjaśnione. String nie jest tablicą a do znaków w stringu od PHP 5 odwołujemy się już tylko przez nawiasy klamrowe {}. Nawiasy tablicowe przy stringach są już deprecated (jak to będzie po polsku?) i ich użycie generuje warningi (error_reporting(E_ALL)).

Tak powinien wyglądać kod z 2 posta:

$string='Mich@ł';
echo $string{0}.$string{strlen($string)-1};

Zapamiętać:

Jest używanie wyrażeń regularnych do sprawdzania czy na końcu i na początku stringa jest myślnik, zamiast jednego "if", to jest jak strzelanie do wróbla z armaty.

Dokładnie. Wyrażeń regularnych używamy tylko i wyłącznie wtedy, kiedy funkcjami operującymi na stringach nie jesteśmy w stanie osiągnąć oczekiwanego rezultatu.

// edyta:

Dziwne, nie mogłem znaleźć w manualu informacji o używaniu nawiasów klamrowych przy stringach w opisie typu. Ale to co napisałem jest prawdą :).

Skrypt chroniący zasoby serwera przed atakami botów exaBotDefender: https://docs.google.com/View?id=dgkd4pj4_0hfj5j4gx

Odnośnik do komentarza
Udostępnij na innych stronach

Rozbijanie explode stringa wydaje mi się lekko mowiąc marnotrastwem energii elektrycznej i przyczynianiem sie do ocieplenia klimatu.
Teraz również tak uważam :) Jednakże przed napisaniem tego tematu żyłbym w niewiedzy i używał explode ;)
A można dużo prościej tongue.gif

$ciag=trim($ciag,'-');

$ciag=trim($ciag,'--');

Po prostu wytnie on końcowe znaki '-','--' jeżeli się pojawią biggrin.gif

Nie przejdzie bo potrzebuje komunikatu ;)
Tak samo jak marnotrawstwem energii elektrycznej i przyczynianiem się do ocieplenia klimatu. Jest używanie wyrażeń regularnych do sprawdzania czy na końcu i na początku stringa jest myślnik, zamiast jednego "if",

czyli chodzi Ci o to że wszyatkie 3 sprawdzania dać do jednego ifa i jeden komunikat o błędzie :)?

Ja osobiście php uczyłem się z kursów znalezionych w necie ;) Jak by nie patrzeć człowiek uczy się przez całe zycie ;)

Jeszcze raz dzięki za pomoc :)

Michał Kryński
Zapraszam na moje forum akwarystyczne  ;-) 

 

Odnośnik do komentarza
Udostępnij na innych stronach

Inco, jeżeli chodzi o dwa myslniki to Twoj kod nie przejdzie z uwagi na to że gdy mamy ciąg "123--443" to myslniki nie zostaną wykryte jako błąd :)

Mi osobiście odpowiada sposób z 3 if'ami z uwagi na to że sam skrypt bedzie uzywany dziennie może z 10 razy a więc mogę pozwolic sobie na "dłuższy" kod z dodatkowymi komunikatami :)

Michał Kryński
Zapraszam na moje forum akwarystyczne  ;-) 

 

Odnośnik do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Umieściliśmy na Twoim urządzeniu pliki cookie, aby pomóc Ci usprawnić przeglądanie strony. Możesz dostosować ustawienia plików cookie, w przeciwnym wypadku zakładamy, że wyrażasz na to zgodę. Warunki użytkowania Polityka prywatności