Egoblog.cz - Petr Kobelka

Nette/Latte a regulární výraz v javascriptu

Při tvorbě javascriptové kontroly validace PSČ jsem narazil v kombinaci s Nette/Latte na zajímavý problém. Zároveň k němu popíšu i jeho řešení.


PHP | Komentáře (1) | Shlédnuto 1435 × | Vloženo: 4. prosince 2014

Úkol zněl jasně. Vytvořit javascriptovou validační funkci pro údaj vkládaný do formuláře. konkrétně šlo o validaci podoby PSČ.

Regulární výraz v javascriptu

Byla to celkem jednoduchá úloha a javascript jsem měl napsaný relativně rychle. Využívám síly regulárních výrazů, abych mohl v případě potřeby jednoduše měnit formát pro validaci a mohl jednoduše postihnout i různé odchylky, jako je např. písmeno v PSČ v cizích zemích.

Javascriptová funkce v základu vypadá takto:

function validatePSC()
{
  var psc = $('#dodaci_psc');
  var pattern = /[0-9]{5}/i;

  if (psc.val().match(pattern) === false)
  {
    alert('CHYBA'); //pochopitelne je zde na produkcnim serveru jina hlaska :-)
    psc.focus()
  }
}

Pro testování jsem vložil javascriptovou funkci přímo do šablony mezi párový tak <script>.

Dotaz na tebe, čtenáři

Už vidíš tu chybu, kterou jsem udělal? Já ji hned neviděl a chvíli mi zabralo ten problém najít. Zkušení Nette-guruové ji určitě už odhalili.

Je třeba brát v potaz jak zmíněný kód, tak i popis, že je umístěn přímo v šabloně. Ta teď už jsi na to určitě přišel. Pořád ne? Ok.

Kde je chyba?

Chyba je v regulárním výrazu v kombinaci s tím, že je funkce vložena do šablony Latte. A co dělá šablona s výrazy ve složených závorkách? Ano, správně - vyhodnotí je. Vy kompilaci šablony jsem získal výstup takový:

function validatePSC()
{
  var psc = $('#dodaci_psc');
  var pattern = /[0-9]5/i;

  if (psc.val().match(pattern) === false)
  {
    alert('CHYBA'); //pochopitelne je zde na produkcnim serveru jina hlaska :-)
    psc.focus()
  }
}

Když se zaměříte na regulární výraz, zjistíte, že jsou složené závorky pryč. Já to ověvil v debugovacím zápisu přes Console.log().

Jak se problému vyhnout?

Jednoduše, umístěte funkci do JS souboru, který nalinkujete v hlavičce stránky. Já přesunul funkci do souboru js.js, který na mém webu obsahuje několik obecných javascriptových funkcí pro web. Tam Latte nebude složené závorky vyhodnocovat a vy budete v klidu.

Podobné články jako "Nette/Latte a regulární výraz v javascriptu"

Petr Kobelka | Egoblog.cz | Tvorba www stránek - www.petrkobelka.cz

Petr Kobelka
Autor je zkušeným web developerem a programátorem s více než 10 letými zkušenostmi. Pracuje jako programátor pro známou Olomouckou společnost zabývající se tvorbou internetových a intranetových řešení. Spolu se zaměstnáním pracuje na volné noze a zabývá se tvorbou internetových stránek. Ve volném čase rád fotí, jezdí na kole, plave a cestuje.

Komentáře

E-mail je potřeba pouze pro vygenerování Gravataru!

1
dare | vloženo 24. června 2015
docela oblibena chyba =), je plno moznosti jak to resit, ale me napadaji 2.
1) vypnuti kontroly latte pomoci n:syntax="off"
2) vymena zavorek za latte makro {l}5{r}
vse v latte dokumentaci http://doc.nette.org/cs/2.3/default-macros
Petr Kobelka
Díky za komentáře Dare,

pěkné řešení. Já to momentálně (25.6.+) řeším tak, že dám k závorkám mezery a mám také klid.

Blog píše Petr Kobelka

Petr Kobelka - egoblog.cz

Žádám všechny, kteří mají zájem vkládat komentáře, aby se řídili pravidly NETikety. Komentáře, porušující tato pravidla můžou být bez varování smazány.