Teme: Web razvoj

Preslovljavanje imejl adrese u ćiriličnom veb obrascu

Skraćena veza: http://pedja.supurovic.net/veza/4460

Otkako je ćirilica poslata lakše primenljiva na veb sajtovima pojavio se novi problem: neki podaci u veb obrascima se obavezno moraju unositi latinicom i to engleskom. Najbolji primer za to su imejl adrese.

Ovo pravi problem korisniku koji popunjava obrazac, jer on to čini ćirilicom, a onda naiđe na polje koje dozvoljava samo englesku latinicu. Tada mora da prebaci tastaturu na latiničnu, unese podatak, zatim vrati ćiriličnu tastaturu i nastavi sa unosom.

Možemo li nekako da olakšamo korisniku?

Evo jednog mogućeg pomagala: umesto da korisnik prebacuje tastaturu na latinicu, neka otkuca adresu ćirilicom, a obrazac će sam da preslovi uneti tekst u latinični. Da se korisnik ne bi zbunjivao, valja upotrebiti JavaScript, tako da se preslovljavanje izvrši u trenutku dok korisnik ukucava adresu.

Prvo, polju u koje se upisuje imejl adresa podesićemo da se na onKeyUp događaj pozove naša funkcija koja će izvršiti obradu.

<input name="email" type="text" onKeyUp="return keyupEmail(this)" />

Događaj onKeyUp se izvršava kada korisnik pusti pritisnuti taster. U ovom primeru na taj događaj biće izvršena funkcija keyupEmail(), kojoj će biti prosleđen objekat polja (this).

Funkcija keyupEmail() je jednostavna. Ona uzima vrednost ukucanog znaka i poziva drugu funkciju, fix_email_chars(), koja vrši preslovljavanje.

Funkcija fix_email_chars() kao ulazni parametar dobija string koji preslovljava a preslovljeni string vraća kao rezultat. U našem slučaju, funkciji prosleđujemo jedan znak, onaj koji je upravo otkucan.

Ovo je sve moglo da se uradi u jednoj funkciji, ali iz praktičnih razloga, dobro je da fix_email_chars() postoji kao posebna funkcija jer se tako može upotrebiti i u drugim slučajevima.

Funkcija fix_email_chars() je takođe jednostavna. Ona sadrži definisana dva niza. Prvi, m_to_fix, sadrži niz znakova koji u imejl adresi nisu dozvoljeni. On sadrži sve ćirilične znakove i nekoliko naših latiničnih znakova.



var m_to_fix = new Array ("a", "b", "v", "g", "d", "đ",
"e", "ž", "z", "i", "j", "k",
"l", "lj", "m", "n", "nj", "o",
"p", "r", "s", "t", "ć", "u",
"f", "h", "c", "č", "dž", "š",
"A", "B", "V", "G", "D", "Đ",
"E", "Ž", "Z", "I", "J", "K",
"L", "LJ", "M", "N", "NJ", "O",
"P", "R", "S", "T", "Ć", "U",
"F", "H", "C", "Č", "DŽ", "Š",
"š", "đ", "č", "ć", "ž", "Š",
"Đ", "Č", "Ć", "Ž");

Drugi niz, m_fixed, sadrži odgovarajuće znakove koje treba umetnuti umesto nedozvoljenih. Za svaki element u nizu m_to_fix mora postojati odgovarajući element u nizu m_fixed.


var m_fixed = new Array ("a", "b", "v", "g", "d", "dj",
"e", "z", "z", "i", "j", "k",
"l", "lj", "m", "n", "nj", "o",
"p", "r", "s", "t", "c", "u",
"f", "h", "c", "c", "dz", "s",
"A", "B", "V", "G", "D", "DJ",
"E", "Z", "Z", "I", "J", "K",
"L", "LJ", "M", "N", "NJ", "O",
"P", "R", "S", "T", "C", "U",
"F", "H", "C", "C", "DZ", "S",
"s", "dj", "c", "c", "z",
"S", "D", "C", "C", "Z");

U primeru je ova funkcija korišćena zamo za preslovljavanje, ali se promenom definicije ova dva niza lako može uvesti i zabrana unosa nekih znakova koji nikako nisu dozvoljeni u imejl adresama, prosto u niz m_to_fix upišete nedozvoljeni znak a u niz m_fixed upišete da se taj znak zamenjuje praznim stringom. Tako korisnik neće moći da ukuca zabranjeni znak.

Moguća unapređenja

Primetićete da funkcija fix_email_chars() radi tako što uzme ulazni string, vadi jedan po jedan znak, traži taj znak u nizu m_to_fix, i ako ga nađe, zameni ga odgovarajućom vrednošću iz niza m_fixed. Izabrao sam ovaj način, zato što je u prieru cilj preslovljavanje imejl adresa. Imejl adresa po pravilu sadrži mali broj znakova, i to mnogo manji nego što je broj znakova koji su zabranjeni, pa je ovaj način preslovljavanja pogodan i brz.

Međutim, ako bi ulazni string bio dugačak tekst, onda ovo nije optimalan način konverzije, jer bi za svaki znak u tekstu bila vršena pretraga po nizu m_to_fix, pa čak i ako se isti znak mnogo puta ponavlja. Tada bi trebalo obrnuti logiku: krenuti redom po nizu m_to_fix i jednim potezom vršiti zamenu svakog znaka iz njega u celom tekstu pomoću regularnih izraza. To bi bilo mnogo brže. Najbolje bi bilo napraviti kombinaciju: proveriti dužinu ulaznog stringa i na osnovu nje odlučiti koji metod zamene treba da se upotrebi.

Ova funkcija se dalje može unaprediti tako da kao parametre dobija i nizove zabranjenih znakova i njihovih zamena, tako da joj se funkcionalnost time značajno povećava, odnosno mogu se primenjivati različita preslovljavanja prema potrebi, no ovo je samo jednostavan primer, a vi ga možete dalje sami razrađivati.

Takođe bi trebalo rešiti i neke specifičnosti preslovljavanja ćirilice u latinicu kao što je preslovljavanje početnog velikog slova. Funkcija, kakva je sada, o tome ne vodi računa, jer to nije potrebno za imejl adrese.

Primer koji radi

Kako sve ovo radi možete pogledati u funkcionalnom primeru preslovljavanje_obrasca_primer.htm

Kod sam isprobao u fajerfoksu 3.6.6 i internet eksploreru 8. Trebalo bi da radi i u svim drugim veb čitačima, pa i onim starijim.


Podelite ovaj članak sa prijateljima


4 comments to Preslovljavanje imejl adrese u ćiriličnom veb obrascu

  • stanislav@letsdoitworld.org

    Postoji problem kada se dođe do @ jer se na ćiriličnom rasporedu kombinacijom shift 2 ne dobija majmunče nego navodnik. Zbog togaje opet potrebno promeniti raspored u ENG.

  • Nije problem u skripti. Znak @ se na ćiriličnoj tastaturi obično dobija na AltGr+V. Ukoliko to ne radi, može se dobiti kucanjem Alt+064 na numeričkoj tastaturi.

  • Ćirilica1

    Pa mogao si i u ovaj komentar da ugradiš ovaj javaskript, da ne meljam tastaturu pri kucanju ovog komentara???

    Evo „procedura“ je ugrađena na sajtu Ćirilice Beograd,
    kao i konverzija navodnika u @…

    Vidi i učlani se, ili osnuj udruženje Ćirilice u Užicu???

    Pozdrav,

    Ćirilica-Beograd

    • Možda ubacim kod kad stignem, sad imam previše drugih obaveza.

      Što se tiče udruženja Ćirilica, moje poimanje ćirilice se suštinski razlikuje od onog koje to udruženje promoviše, tako da teško da ćete mene videti kao člana, a pogotovo ne kao aktivistu.

Leave a Reply

 

 

 

You can use these HTML tags

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

Popunite izraz tako da bude tačan: *