Problem ze sprawdzaniem długości stringa

0

Witam!
Mam taki kod jak poniżej. Ma on za zadanie sprawdzać długość stringa podnego w polu <input>. Niestety nie działa, tak jak powinien - kiedy długość jest właściwa (wyświetla, że zmienna len = 11) wyświetla komunikat, że string jest za długi. Dlaczego?

<input type = "text" id="pesl" value="">
<div id = "span_e">
</div>
jQuery(document).ready(function() {	
jQuery('#pesl').on('input', function(){
	    var pesel = jQuery(this).val();
	  var len = pesel.length; 
    console.log("Len: "+len);
      var flen1 = "PESEL za długi! Musi mieć dokładnie 11 cyfr!";
	var flen2 = "PESEL za krótki! Musi mieć dokładnie 11 cyfr!";
  	var flen3 = "OK!";

	if(len<11){ jQuery('#span_e').empty().append(flen2 + " " + len);}
	if(len>11){ jQuery('#span_e').empty().append(flen1 + " " +len);}
  if(len==11){ jQuery('#span_e').empty().append(flen1 + " " + len);}
   });	
      });
1

dla len == 11 wyświetla komunikat flen1 (czyli pesel za długi). Powinieneś tam wrzucić flen3. Zmienne flen są w ogóle zbyteczne. Jakbyś miał:

if (len==11) { 
  jQuery('#span_e').empty().append("OK! " + len);
}

to byś się nie pomylił. A jeśli bardzo Cię kręci wstawianie nadmiarowych zmiennych to niech nazwy coś mówią np: flen1 -> messageToLong, flen2 -> messageToShort, flen3 -> messageOk

0

Ok, była pomyłka w nazwie i po jej poprawieniu kod działa. Jednak był to tylko fragment właściwego skryptu, gdzie tej pomyłki nie ma...a kod i tak nie działa prawidłowo. Proszę o pomoc

jQuery(document).ready(function() { 
jQuery('#pesl').on('input', function(){
	    var pesel = jQuery(this).val();
	  var len = pesel.length; 
    console.log("Len: "+len);
      var tooLong = "PESEL za długi! Musi mieć dokładnie 11 cyfr!";
	var tooShort = "PESEL za krótki! Musi mieć dokładnie 11 cyfr!";
	  var nn = "Pesel musi zawierać wyłącznie cyfry!";
	if(len<11){ jQuery('#span_e').empty().append(tooShort);}
	if(len>11){ jQuery('#span_e').empty().append(tooLong);}
if(!pesel.match(/^\d+$/))
{
   jQuery('#span_e').empty().append(nn);
} 
if(len==11 && pesel.match(/^\d+$/)) {
	 var arr = [];
	for(i=0; i<=pesel.length; i++){
    arr[i] = pesel.charAt(i);
}
	
var a = parseInt(arr[0]); 
var b = parseInt(arr[1]); 
var c = parseInt(arr[2]); 
var d = parseInt(arr[3]); 
var e = parseInt(arr[4]); 
var f = parseInt(arr[5]); 
var g = parseInt(arr[6]); 
var h = parseInt(arr[7]); 
var i = parseInt(arr[8]); 
var j = parseInt(arr[9]); 
var ck = parseInt(arr[10]);
    
var check = (a + (3 * b) + (7 * c) + (9 * d) + e + (3 * f) + (7 * g) + (9 * h) + i + (3 * j));
var check2 = check % 10;
var check3 = 10 - check2;

var  f= "Podany Pesel jest błędny!";

if(check2 !=0 && ck !=0 && check3!=ck){jQuery('#span_res').empty().append(f);}
if(check2 == 0 && ck!=0){ jQuery('#span_e').empty().append(f);}
if(check2 != 0 && ck==0){ jQuery('#span_e').empty().append(f);}	 
 }

		 });	
 });	
0

Teraz nie sprawdzasz czy długość jest równa 11...

0
marcinbarud napisał(a):

Teraz nie sprawdzasz czy długość jest równa 11...

Sprawdzam czy dlługość = 0 i czy string zawiera tylko liczby

if(len==11 && pesel.match(/^\d+$/)) 
0

Na pierwszy rzut oka wygląda ok, choć tak sformatowałeś kod, że trudno wyłuskać gdzie if(len==11 && pesel.match(/^\d+$/)) { się kończy. Pytanie jakie tam wstawiasz dane (czy testujesz poprawny pesel), czy algorytm jest w pełni poprawny (poszukaj informacji o konstrukcji pesel - wagi, cyfra kontrolna i porównaj to z kodem który masz). Poza tym zwracasz tylko komunikaty o błędzie, a jak przechodzi poprawnie to nie zwraca nic. Nie wiem czy taki było Twoje założenie. Poza tym nie powiedziałeś najważniejszego - co to znaczy nieprawidłowo? Co Ci zwraca dla prawidłowego peselu, przez które z rozgałęzień algorytmu przechodzi...

1 użytkowników online, w tym zalogowanych: 0, gości: 1