Autor | Zpráva | ||
---|---|---|---|
maycza Profil |
#1 · Zasláno: 14. 1. 2013, 13:39:48
Zdravím všechny,
mám vytvořenou funkci, která má za úkol kontrolovat, zda je v inputu zapsán datum ve správném formátu. Datum musí být zadáno ve formátu dd.mm.rrrr. Nejdřív zadanou hodnotu rozdělím na 3 části a pak kontroluji znaky v každé části, tedy jestli jsou zadány čísla od 0 do 9, pak kontroluju rozsah zadaných hodnot, atd. Kontrolu znaků dělám takto: function check_date(field){ var re = /^[0-9]$/; var ok = 0; var result="den: "; for (i=0;i<den.length;i++){ if (!re.test(den[i])){ok=1;} } result = result + " mesic:"; for (i=0;i<mesic.length;i++){ if (!re.test(mesic[i])){ok=1;} } result = result + " rok:"; for (i=0;i<rok.length;i++){ if (!re.test(rok[i])){ok=1;} } alert("výsledek: " + result); } V html mám: <input type='text' name='datum' onblur="check_date(this);"> Když to spustím v Google Chrome a zadám např. "14.1.2013", vrátí mi to ok=0, v IE 8 (v kompatibilním režimu) ok=1 Nevíte někdo v čem je problém? |
||
_es Profil |
#2 · Zasláno: 14. 1. 2013, 13:43:26
maycza:
Skús použiť udalosť onchange .
|
||
Chamurappi Profil |
#3 · Zasláno: 14. 1. 2013, 13:49:26
Reaguji na mayczu:
Co je v proměnných den , mesic a rok ? Jestli řetězec, tak z něj ždímat nejde spolehlivě tahat znaky přes indexy, musíš použít metodu charAt . Ale k tomu bys asi neměl důvod, když můžeš otestovat regulárním výrazem i víc znaků zároveň.
Mimochodem, celá ta funkce je docela zvláštní. |
||
maycza Profil |
#4 · Zasláno: 14. 1. 2013, 13:54:41 · Upravil/a: maycza
_es:
kdepak, tím to není.. Ještě se dívám.. tu proměnnou result si odmyslete O:-) tam jsem jenom připisoval výsledek každé podmínky, abych viděl jednotlivé kroky... (v IE samé chyby, ať jsem zadal cokoliv, v Chrome OK)Chamurappi: den , mesic a rok jsou řetězce..
Radši sem dám celou funkci, ať to je líp vidět: function check_date(field){ var datum; var den; var mesic; var rok; var dateField = field; var re = /^[0-9]$/; datum = dateField.value; rozdel=datum.split("."); if ((rozdel.length<3)||(rozdel.length>3)){ if (rozdel.length==1){ pomm=rozdel[0]; if (pomm.length>0){alert ("Chybně zadané datum!!!");} }else{alert ("Chybně zadané datum!!!");} }else{ den=rozdel[0]; mesic=rozdel[1]; rok=rozdel[2]; var ok=0; for (i=0;i<den.length;i++){ if (!re.test(den[i])){ok=1;} } for (i=0;i<mesic.length;i++){ if (!re.test(mesic[i])){ok=1;} } for (i=0;i<rok.length;i++){ if (!re.test(rok[i])){ok=1;} } if (ok==0){ if (((mesic.length==1)||(mesic.length==2))&&((den.length==1)||(den.length==2))&&(rok.length==4)){ if ((mesic<1)||(mesic>12)){alert("Chybně zadané datum!!!");} else{ if (mesic==2){ if((den<1)||(den>29)){alert("Chybně zadané datum!!!");} }else{ if((den<1)||(den>31)){alert("Chybně zadané datum!!!");} } } if ((rok<2011)||(rok>2112)){alert("Chybně zadané datum!!!");} }else{alert("Chybně zadané datum!!!");} }else{ alert("Chybně zadané datum!!!"); } } } |
||
_es Profil |
|||
maycza Profil |
#6 · Zasláno: 15. 1. 2013, 09:11:09
Díky za rady, budu to muset ještě nastudovat..
Prozatím jsem to vyřešil změnou výrazu na var re = /[0-9]{0,1}[0-9]{1}(.)[0-9]{0,1}[0-9]{1}(.)[0-9]{1}[0-9]{1}[0-9]{1}[0-9]{1}/; Časem to snad doladím :D |
||
_es Profil |
maycza:
function overenieDatumu(den, mesiac, rok){ var d = new Date(rok, mesiac - 1, den); return d.getDate() == den && d.getMonth() == mesiac - 1 && d.getFullYear() == rok; } |
||
Časová prodleva: 11 let
|
0