| 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: 13 let
|
|||
0