Úloha 7 – Normalizace řetězce s regulárním výrazem a úpravou délky

Website: Moodle ZČU
Kurs: Sada úloh pro procvičení v předmětu KVD/PGM1P (BP Vítek Dolný)
Buch: Úloha 7 – Normalizace řetězce s regulárním výrazem a úpravou délky
Gedruckt von: Nepřihlášený host
Datum: Sonntag, 18. Oktober 2026, 06:48

Úvod do úlohy

Při zpracování textu se v kódu často opakují stejné kroky: oříznout mezery, převést na jednotnou velikost písmen, odstranit diakritiku nebo nahradit zakázané znaky. Pokud tyto kroky děláme roztroušeně na více místech, kód se nafukuje, hůř se čte a hůř udržuje. Cílem tohoto bloku je naučit se identifikovat zbytečné operace, slučovat je do logických řetězců volání (method chaining) a psát komentáře, které jasně vysvětlí, proč a v jakém pořadí se transformace provádějí. Výsledkem budou kratší, čitelnější a snadno rozšiřitelné úseky kódu.


Teorie a principy

  1. Detekce duplicit a zbytečností

    • Vyhledej opakované transformace (např. opakované trim(), dvojí toLowerCase() apod.).

    • Operace, které se nemění v čase, prováděj jednou a co nejpozději před porovnáním/výstupem.

  2. Method chaining (řetězení metod)

    • Většina stringových metod vrací nový řetězec, takže je lze volat za sebou:
      text.trim().toLowerCase().replace(...).slice(...).

    • Řetězení pomáhá čitelnosti, pokud je krátké a logicky seřazené. Delší řetězy je vhodné rozdělit do více řádků.

  3. Pořadí transformací je důležité

    • Typické pořadí: normalizace bílých znaků → sjednocení velikosti písmen → specifická náhrada → finální výřez/porovnání.

    • Nesprávné pořadí může změnit význam (např. replace() před trim() může ponechat náhodné mezery).

  4. Malé, pojmenované kroky

    • Dlouhé řetězení rozděl do „mikro-fází“ s mezivýsledky a komentáři.

    • Každý krok by měl mít jedinou zodpovědnost (Single Responsibility).

  5. Komentáře k posloupnosti volání

    • Komentuj záměr (co a proč), ne samozřejmý zápis.

    • U složitějších regulárních výrazů vysvětli význam skupin a příznaků (g, i).


Praktické příklady kódu

1) Před a po – zbytečné opakování vs. čisté řetězení

Před

Po

 

2) Postupné fáze + komentáře k posloupnosti

3) Malá aplikace (HTML + CSS + JS) – refaktoring vstupu před validací


Typické chyby / záludnosti

  • Zbytečné opakování operací

    • Vícenásobné toLowerCase() nebo trim() v jedné větvi kódu zpomaluje a mate. Udělej to jednou a na správném místě.

  • Nejasné nebo chybějící komentáře

    • Komentuj záměr a pořadí. Např. „nejdřív normalizuj mezery, pak teprve nahrazuj“ je užitečnější než „volání trim“.

  • Příliš dlouhý řetězec metod

    • Pokud je transformací mnoho, rozděl je na logické fáze (mezivýsledky s jasným názvem proměnné).

  • Nesprávné pořadí transformací

    • Např. .replace() před .toLowerCase() může selhat, pokud hledáš bez i.

    • Obecně nejdříve sjednoť tvar, poté dělej konkrétní náhrady.

  • Zapomenutí na neměnnost řetězců

    • Každá metoda vrací nový řetězec. Výsledek si ulož, jinak se „ztratí“.


Shrnutí

  • Identifikuj duplicity a zbytečné operace; prováděj je jednou a v jasném pořadí.

  • Využívej method chaining pro přehlednost, ale dlouhé řetězy raději rozděl do fází srozumitelných názvů.

  • Komentuj záměr a pořadí transformací, zvlášť u regulárních výrazů.

  • Pamatuj na neměnnost řetězců – vždy pracuješ s novou hodnotou.

  • Standardní pořadí: trim → normalizace mezer → sjednocení písmen → specifické náhrady → finální porovnání/výstup.

Úloha

Zadání (kontext úlohy):

E-shop přijímá kupónové kódy, které uživatelé často píší s mezerami, pomlčkami a malými písmeny. Tvým úkolem je vstup „uklidit“ do jednotného tvaru: pouze velká písmena a číslice, přesně 8 znaků.


Cíl úlohy:

Procvičit si řetězení metod (method chaining) na řetězcích a správné pořadí transformací (ořez → sjednocení → filtrace znaků → délková úprava).

Vstupní podmínky:
  • Student pracuje pouze s nově vytvořeným souborem script.js.

  • V souboru bude proměnná kupon s libovolným „neuklizeným“ vstupem (může obsahovat mezery, pomlčky, tečky, malá písmena apod.).


Požadovaný výstup:
  1. Do konzole vypiš původní hodnotu kupon.

  2. Do konzole vypiš normalizovaný kód:

    • odstraněné okolní mezery,

    • všechna písmena převedená na VELKÁ,

    • odstraněny všechny znaky mimo A–Z a 0–9,

    • výsledná délka přesně 8 znaků (pokud je delší, ber jen prvních 8; pokud kratší, doplň znakem X).


Doplňující pokyny:
  • Drž se pořadí: trim() → toUpperCase() → replace() (filtrace) → slice() → padEnd().

  • Každá metoda vrací nový řetězec – použij je v jednom zřetězeném výrazu.

  • U složitějšího kroku (filtrace znaků) přidej krátký komentář, co regulární výraz dělá.

Řešení úlohy

Co je zde splněno:

  • transformace probíhá postupně a v přesném pořadí: trim → toUpperCase → replace → slice → padEnd,

  • každá řádka provádí jen jednu operaci a ukládá mezivýsledek,

  • původní hodnota je zachována a vypsána, výsledný kód má vždy přesně 8 znaků.

Vylepšení oproti začátečnické verzi:

  • vše v jednom výrazu (method chaining) – kratší a snadno znovupoužitelné,

  • zapouzdření do funkce pro opakované použití,

  • přehledný, moderní zápis se šipkovou funkcí a šablonovými řetězci.

Poznámky (volitelné):

  • Pokud je po filtru (krok3) text prázdný, padEnd(8, "X") bezpečně doplní XXXXXXXX.

  • slice(0, 8) nevyvolá chybu ani u kratších řetězců — vrátí jen dostupnou část.