Ú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
-
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.
-
-
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ů.
-
-
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ředtrim()může ponechat náhodné mezery).
-
-
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).
-
-
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()nebotrim()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áš bezi. -
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á
kupons libovolným „neuklizeným“ vstupem (může obsahovat mezery, pomlčky, tečky, malá písmena apod.).
Požadovaný výstup:
-
Do konzole vypiš původní hodnotu
kupon. -
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–Za0–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.