W tym wpisie pokażę, jak prostym kodem JS rozwiązać problem zliczenia liczby wystąpień konkretnego słowa w ciągu znaków w JavaScript (czy też TypeScript).

Zacznijmy od prostego kodu:

var input = "Oto kot, czy kto to?";
var count = (input.match(/ot/g) || []).length;
console.log(count);

Wyświetli w konsoli “1”.

Co tu się dzieje?

W linii drugiej jest przekazane wyrażenie regularne /ot/g. Oznacza to “szukaj w input wystąpień ‘ot'”. Dodanie flagi g (global) sprawia, że po znalezieniu pierwszego wystąpienia poszukiwania się nie kończą.

Dlaczego 1, nie 2?

Ktoś mógłby uznać, że przecież są 2 wystąpienia “ot” w ciągu input. Tak i nie. Przecież drugie to “Ot”, nie “ot”.

Aby móc zignorować wielkość liter należy wykorzystać dodatkową flagę i (ignore).

var count = (input.match(/ot/gi) || []).length;

Wtedy w wyniku otrzymujemy 2.

Parametryzacja

Co zrobić, aby móc przekazać wyszukiwany tekst jako zmienną do funkcji. Dodatkowo wykorzystam konstruktor RegExp.

function countOccurrences(input, word) {
    return (input.match(new RegExp(word, 'gi')) || []).length;
}

Wzorzec MVC w PHP dla profesjonalistówWyrazenia regularne. Wprowadzenie

Kazdemu programiscie przyjdzie wreszcie skorzystac z wyrazen regularnych. Warto zatem miec chocby podstawowa wiedze dotyczaca tego mechanizmu.

Skad jednak czerpac taka wiedze? Calkowite postawy sa na tyle proste, ze mozna spokojnie znalezc przyklady w internecie. Troche bardziej skomplikowane lub nawet zaawansowane wykorystanie “reg expow” takze moze byc latwo znalezione.

To, czego mi zawsze brakowalo bylo pochylenie sie nad pewnymi podstawowymi niuansami. Michael Fitzgerald w swojej ksiazce wlasnie to robi. Prowadzi krok po kroku czytelnika od przykladow bardzo prostych przez coraz trudniejsze do naprawde ciekawych przypadkow. Wyjasnia przy okazji mechanizmy jakie wykorzystuje oraz pokazuje rozne sposoby otrzymania tego samego wyniku.

Continue reading

W niedawnym wpisie pokazałem zgrubnie mój walidator formularzy yFormValidator. W tym wpisie pokażę dokładniej możliwości tego bardzo prostego frameworka walidacyjnego.

Jeśli nie interesuje Cię część teoretyczna, skocz do praktyki.

Predefiniowane klasy

yFormValidator posiada kilka z góry zdefiniowanych klas służących do walidacji. Są to:

  • ‘not empty’ – niepusty ciąg znaków
  • ‘alphanumeric’ – litery, cyfry oraz podkreślenie, bez białych znaków
  • ‘integer’ – liczby całkowite (dodatnie i ujemne)
  • ‘decimal’ – liczby rzeczywiste (dodatnie i ujemne)
  • ‘date’ – data w formacie dd/mm/rrrr, od roku 1600 [uwzględnia lata przestępne, liczby dni w miesiącach itp.]
  • ’email’ – adres e-mail

Continue reading

Wyrażenia regularne są to wzorce, które opisują łańcuch symboli [wikipedia].

Za pomocą wzorców regularnych możemy sprawdzić, czy danych ciąg znaków “pasuje” do naszego wzorca, np. mając listę ludzi:

  1. Jan Kowalski
  2. Zdzisław Nowak
  3. 123312 23232^%^%$
  4. Janko Muzykant

Od razu widzimy, że pozycja 3 nie pasuje. Dlaczego? Przecież porównując “Jan Kowalski” == “Zdzisław Nowak” także otrzymamy `false’. Otóż, wszystkie pozostałe pozycje na liście spełniają pewne kryteria jakie sobie założyliśmy:

<wzorzec>{numer}{kropka}{spacja}{imię}{spacja}{nazwisko}{enter}</wzorzec>

JavaScript posiada wbudowane mechanizmy obsługi wyrażeń regularnych (ang. regular expressions, w skrócie regex/regexp).

W tym wpisie pokażę, jak za pomocą wyrażeń regularnych walidować dane przekazywane przez użytkownika w formularzu.Continue reading