» »

[javaScript] Preverjanje formata zapisa EMŠO

[javaScript] Preverjanje formata zapisa EMŠO

Cvenemir ::

Lp.

K sledeči kodi, bi rad dodal k preverjanju pravilnega vnosa EMŠO še preverjanje, ali vhodni string vsebuje le števila in ne črk. poskusil sem takole:

for(i=0; i<x.length; i++)
	{
		poljeZnakov[i] = x.charAt(i);
		if(!isNaN(poljeZnakov[i]))
		{
			alert("Vnesite samo cela stevila!");
		}
	}


To kodo sem dodal v zanko, kjer preverim, če je dolžina stringa sploh 13 (vrstica 20). Problem je v tem, da mi vedno javi napako, čeprav vpišem le števila.

Koda funkcije:
function validateEMSO()
{
var x = document.forms["EMSO"]["emso"].value;

if (x == null || x == "")
  {
	alert("Polje za vnos je prazno!");
	return false;
  }
else if(x.length < 13)
  {
	alert("EMSO je prekratek!");
	return false;
  }  
else if(x.length > 13)
  {
	alert("EMSO je predolg!");
	return false;
  }
else if(x.length == 13)
  { 

	var i;
	var poljeZnakov = [12];		 
	var vsota=7*parseInt(x.charAt(0))+6*parseInt(x.charAt(1))+5*parseInt(x.charAt(2))+4*parseInt(x.charAt(3))+3*parseInt(x.charAt(4))+2*parseInt(x.charAt(5))+7*parseInt(x.charAt(6))+6*parseInt(x.charAt(7))+5*parseInt(x.charAt(8))+4*parseInt(x.charAt(9))+3*parseInt(x.charAt(10))+2*parseInt(x.charAt(11));
	var ostanek = vsota/11;
	
	if(ostanek == 0)
	{
	  K = x.charAt(12);
	  K = 0;
	  alert("EMSO je pravilen!");
	}	
	else
	{
	  K = x.charAt(12);
	  K = 11-ostanek;
	  if(K == 10)
	  {
	    alert("Vnesli ste napacen EMSO!");
	  }
	  else
	  {
		alert("EMSO je pravilen!");
	  }
	}	
  }
}

Spura ::

Probi vnest same crke. :)

nightrage ::

Probi s tole funkcijo:

function numbersonly(myfield, e, dec)
{
	var key;
	var keychar;
	
	if (window.event)
	   key = window.event.keyCode;
	else if (e)
	   key = e.which;
	else
	   return true;
	keychar = String.fromCharCode(key);
	
	// control keys
	if ((key==null) || (key==0) || (key==8) || 
		(key==9) || (key==13) || (key==27))
	   return true;
	
	//decimal
	else if (keychar == ".")
	{		
		if (myfield.value == "")
		{
			return false;
		}	
		else
		{
			if (!ifDotExist(myfield.value))
			{				
				return true;
			}
			else
			{
				return false;
			}
		}
	}
	
	// numbers
	else if ((("0123456789").indexOf(keychar) > -1))
	   return true;
	  
	
	
	// decimal point jump
	/*else if (dec && (keychar == "."))
	   {
	   myfield.form.elements[dec].focus();
	   return false;
	   }*/
	else
	   return false;
}

Cvenemir ::

Klicaj sem odstranil iz:

if(!isNaN(poljeZnakov[i]))


zdaj dela :)

Cvenemir ::

Kako pa naj preverim, če je prvi znak vpisne številke črka?

Poskusil sem takole, a ne izpiše nobenega obvestila.
function validateVpisna()
{
	var y = document.forms["vpisna"]["vpisnaST"].value;
	if (y == null || y == "")
	{
		alert("Polje za vpisno številko je prazno!");
		return false;
    }
	else if(y.length < 8)
	{
		alert("Vnesli ste prekratko vpisno stevilko!");
	}
	else if(y.length > 8)
	{
		alert("Vnesli ste predolgo vpisno stevilko!");
	}
	else 
	{
		var prviZnak = y.charAt(0);
		
		if((prviznak >= "a" && prviZnak <= "z") || (prviznak >= "A" && prviZnak <= "Z"))
		{
			alert("Vnesli ste veljavno vpisno stevilko.");
		}
		else
		{
			alert("Vnesli ste neveljavno vpisno stevilko.");
		}
	}

}

KernelPanic ::

Probaj implementirat KeyActionListener na vnosno polje in nato ob vsakem pritisku tipke preveris, ali je stevilka. Obenem tudi stejes stevilo pritiskov, ko je enak 13, zakljucis stvar.

eVro ::

Nisem ravno ekspert, ampak če poskušaš EMŠU prišteti 1 in preveriš tip rezultata, a ne bo NaN če je bila v emšu kakšna neštevilka?

mr1two ::

uporabi to

String niz="221197950511a";
Pattern p = Pattern.compile("^[A-Za-z]+$");
p.matcher(niz).matches();


Poglej si, ker je simpl zadeva za uporabo, če lahko to uporabiš tudi v javascriptu.

Zgodovina sprememb…

  • spremenil: mr1two ()

win64 ::

Poleg preverjanja, če je niz številka in če je niz dolg 13 znakov, moraš preveriti tudi kontrolno številko.
Več na: Enotna mati%C4%8Dna %C5%A1tevilka ob%C4%8Dana @ Wikipedia

var preveri=function(niz){
 var checks = [7,6,5,4,3,2,7,6,5,4,3,2]
 var vsota=0 ;
 if(isNaN(niz)) return false;
 if(niz.length != 12) return false;
 for(var i=0; i<niz.length-1; i++) vsota+=checks[i]*niz[i];
 
 vsota %= 11;
 return (vsota!=10) && (11-vsota==niz[12] || (vsota==niz[12] && vsota==0) );
} 

Cvenemir ::

Kako bi pa dodal, da se pojavi gumb "Submit", ko sta obe števili vnešeni pravilno?
Pa še tole: Odkar sem dodal funkcijo samoStevilke, se funkcija validateEmso ne izvede več. Kaj je potrebno spremeniti?

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1250" />
<script type="text/javascript">


function validateEMSO()
{
var x = document.forms["EMSO"]["emso"].value;

if (x == null || x == "")
{
	alert("Napačen vnos. (prazen string)");
}
else if(x.length != 13)
{
	alert("Napačen vnos. (Predolgo/prekratko število)");
}

var kontrola = [7, 6, 5, 4, 3, 2, 7, 6, 5, 4, 3, 2];
var vsota = 0;
var i;

for(i = 0; i<x.length - 1; i++)
{
	vsota += kontrola[i] * x[i];
}
vsota = vsota % 11;

if(vsota <= 1 && vsota <= 9)
{
	x.charAt(12) = vsota;
}
else if(vsota == 10)
{
	alert("Zadnje številke EMŠO ni mogoče izračunati.");
}
else if(vsota == 11)
{
	x.charAt(12) = 0;
}


function validateVpisna()
{
	var y = document.forms["vpisna"]["vpisnaST"].value;
	if (y == null || y == "")
	{
		alert("Polje za vpisno številko je prazno!");
		return false;
    }
	else if(y.length != 8)
	{
		alert("Vnesli ste prekratko/predolgo vpisno številko!");
	}
	else 
	{
		var prviZnak = y.charAt(0);
		
		if((prviznak >= "a" && prviZnak <= "z") || (prviznak >= "A" && prviZnak <= "Z"))
		{
			alert("Vnesli ste veljavno vpisno stevilko.");
		}
		else
		{
			alert("Prvi znak mora biti črka.");
		}
	}

}

</script>
</head>

<body>
<script language="JavaScript">
function samoStevilke(evt)
{
	var e = event || evt; 
	var charCode = e.which || e.keyCode;

	if (charCode > 31 && (charCode < 48 || charCode > 57))
	{
		alert("Vnašate lahko samo števila od 1-9");
		emso1.value=""
		return false;
	}
	else
	{
		return true;
	}
}

</script>
<p><h2>Vnesite zahtevane podatke</h2></p>

<form id="form1" name="EMSO" onsubmit="return validateEMSO();">
EMŠO: <input type="text" name="emso" id="emso1" onkeypress="return samoStevilke();" maxlength="13" /><br />
</form>

<form id="form1" name="vpisna" onsubmit="return validateVpisna()">
Vpisna Številka: <input type="text" name="vpisnaST" />
</form>

</body>

</html>

amacar ::

Funkcije valdiateEMSO sploh nimaš zaključene.

win64 ::

In dodaj type="text/javascript" tudi v spodnjo značko script.
Poglej v konzolo brskalnika za napako
Če imaš chrome ali IE ali dodatek firebug je to na voljo s pritiskom na F12.
Konzolo za firefox pa dobiš s pritiskom ctrl+shift+k.
V konzoli ti prikaže kje je sintaktična napaka.

Cvenemir ::

Zdaj ko sem zaključil funkcijo mi ne javi nobene napake več. Zanima me še, kako bi ustvaril gumb za pošiljanje podatkov (submit), kateri se prikaže šele, ko je validacija obeh textboxov uspešna.

win64 ::

s css-ji
gumbu nastavi style na "display:none"

v javascriptu ga prikažeš z:
form.tvojSubmitGumb.style.display = "inline"
in skriješ z:
form.tvojSubmitGumb.style.display = "none"


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Javascript

Oddelek: Programiranje
61171 (984) amacar
»

Javascript pomoč

Oddelek: Izdelava spletišč
202042 (1598) Lion29
»

[Java][Naloga] Skladi

Oddelek: Programiranje
51669 (1468) bijonda
»

Internet strani kot slideshow

Oddelek: Izdelava spletišč
212104 (1855) sverde21
»

read integer v javi

Oddelek: Programiranje
91371 (1272) kopernik

Več podobnih tem