Blog webdeveloperski Patryk yarpo Jar

[JS] Usuwanie polskich ogonków z ciągu znaków

Autor wiadomości Lipiec 29, 2011

Znaki diakrytyczne, czyli popularnie zwane ogonki są częstą zmorą programistów. Ą, ć, ś, ę, ł, Ó, Ź, itp. niestety dają o sobie znać w najgorszych momentach.

Co zrobić aby pozbyć się polskich znaków diakrytycznych z ciągu znaków? Podmienić je na polskie odpowiedniki. Oto przykładowe rozwiązanie:

String.prototype.escapeDiacritics = function()
{
    return this.replace(/ą/g, 'a').replace(/Ą/g, 'A')
        .replace(/ć/g, 'c').replace(/Ć/g, 'C')
        .replace(/ę/g, 'e').replace(/Ę/g, 'E')
        .replace(/ł/g, 'l').replace(/Ł/g, 'L')
        .replace(/ń/g, 'n').replace(/Ń/g, 'N')
        .replace(/ó/g, 'o').replace(/Ó/g, 'O')
        .replace(/ś/g, 's').replace(/Ś/g, 'S')
        .replace(/ż/g, 'z').replace(/Ż/g, 'Z')
        .replace(/ź/g, 'z').replace(/Ź/g, 'Z');
}
// przykładowe wykorzystanie:
var test = new String("ąźĘŹĆŚół");
alert(test.escapeDiacritics());

Wykorzystałem tu mechanizm prototypów, dzięki czemu każdy ciąg znaków w Twoich skryptach, po dodaniu powyższego kodu będzie "widział" nową metodę. Poczytaj o rozszerzaniu obiektu.

Ogonkowy usuwacz online

Przykładowe zastosowanie powyższego kodu:


Miłej zabawy z kodem 🙂

Warto przeczytać:

Komentarze (8) Trackbacks (0)
  1. Ostatni, przypadkiem, pisałem podobną funkcję. Wydaje mi się, że powinna być sporo szybsza. Oto ona: https://github.com/Reinmar/planet/blob/master/lib/model/Article.js#L19

  2. W zasadzie – nie dopowiedziałem – ta funkcja ma trochę inne zadanie – usuwa wszelkie znaki spoza a-zA-Z0-9\- jeśli nie znajdzie ich w tablicy do podmiany. Ale łatwo można byłoby stuningować do wersji zamieniającej plznaczki.

  3. na stronie:
    http://yarpo.pl/download/examples/ogonki-porownanie

    umieściłem skrypt porównujący nasze rozwiązania.
    Przy wykorzystaniu Twojej funkcji:
    function ( c )
    {
    if (c in reps)
    {
    return reps[c];
    }
    return ”;
    }
    wyniki jakie średnio otrzymywałem można uznać 13/18 na korzyść Twojego rozwiązania.

    gdy lekko stunningowałem Twoją funkcję:
    function ( c )
    {
    return reps[c] || ”;
    }

    wyniki poprawiły się do ok 10/18, ocierając się chwilami nawet o 50%.

    testowane na FF 6, windows XP.

  4. O – dzięki za poprawkę. Powinienem to tak zrobić z początku.

    BTW. widziałem, że używasz yProfilera. Nie wiem jak działa, ale ostatnio nabrałem wątpliwości co do poprawności wielu testów. Trafiłem na kilka przypadków, które w zależności jak się je testowało dawały inne rezultaty.

    Choć w tym konkretnym przypadku nie powinno mieć to znaczenia.

  5. yProfiler jest moim prostym obiektem do takich zadań. Sądzę, że tu +/- spełnia stawiane mu cele 🙂
    http://www.yarpo.pl/2011/02/17/mierzenie-czasu-wykonania-skryptow-js/

  6. Cześć rzeczywiście fajny scrypt czy mógłbyś go trochę stuningowac by jego efektem była fraza z zamienionymi ogonami na normalny tekst który mogę umieścić w dowolnym miejscu strony czy tez wstawić w link

    • Nie mam nic przeciwko temu, abyś pobrał kod dostępny na tej stronie i zrobił z nim cokolwiek chcesz 🙂

      Przyznam, że niezbyt rozumiem jak dokładnie miałoby działać to, co proponujesz 🙂

  7. Chciałbym zmienić w URL generowanym przez cms fraze na nie zawierającą polskich znaków czyli niestety łatwa funkcja php nie wchodzi w grę kod wyrzucany przez php jest zbudowany poprawnie ale zawiera polskie znaki


Leave a comment

 

Brak trackbacków.