Format der Bestellnummer prüfen

  • Themenstarter Themenstarter rika_hh
  • Beginndatum Beginndatum
R

rika_hh

Hallo,
mein Script, dass Bestellnummern nur im Format a1234567ABCD (Kleinbuchstabe a-f, 7 Zahlen, 4 Großbuchstaben) zulassen soll, scheint einen Fehler zu haben, den weder ich noch JSLint finden. :-( Denn es lässt auch Bestellnummern im Format a1aaaaaaABCD zu, also nur das zweite Zeichen als Zahl, obwohl das zweite BIS achte Zeichen je eine Zahl sein soll. Gibt man an dritter Stelle (oder an dritter bis achter Stelle) eine Zahl ein, gibt es richtigerweise die Fehlermeldung, daher glaube ich, dass es an der zweiten Stelle hapert, d.h. irgendetwas falsch daran? -> for(i=1;i<8;i++)
Würde mich freuen, wenn mir hier jemand helfen könnte.

Der gesamte Code:
Code:
if(bestellnr.length==12) // Wenn die Bestellnr. 12 Zeichen lang ist...
	{
	erstes_zeichen=bestellnr[0];
	if(erstes_zeichen=="a" || erstes_zeichen=="b" || erstes_zeichen=="c" || erstes_zeichen=="d" || erstes_zeichen=="e" || erstes_zeichen=="f") // ...und das erste Zeichen a,b,c,d,e oder f ist...
		{
		for(i=1;i<8;i++)
			{
			mittlere_zeichen=bestellnr[i];
			if(!isNaN(mittlere_zeichen)) // ...und die mittleren Zeichen Zahlen sind...
				{				
				for(i=8;i<12;i++)
					{
					restliche_zeichen=bestellnr[i];
					if(restliche_zeichen>="A" && restliche_zeichen<="Z") // ...und die restlichen 4 Zeichen Großbuchstaben sind...
						{
						// ... mach weiter
						}
					
					else // Wenn die letzten 4 Zeichen keine Großbuchstaben sind, gib eine Fehlermeldung aus und brich ab.			
						{
						alert("Die letzten vier Zeichen müssen Großbuchstaben sein!");
						return false;
						}
					}
				}		
			
			else // Wenn die mittleren Zeichen keine Zahlen sind, gib eine Fehlermeldung aus und brich ab.	
				{
				alert("Die mittleren Zeichen müssen Zahlen sein!"); 
				return false;
				}
			} 
		}

	else // Wenn das erste Zeichen kein a,b,c,d,e,f ist, gib eine Fehlermeldung aus und brich ab.									
		{
		alert("Erstes Zeichen muss ein kleines a,b,c,d,e oder f sein!");
		return false;
		} 
	} 
			
else // Wenn die Bestellnr. keine 12 Zeichen besitzt, gib eine Fehlermeldung aus und brich ab.	
	{
	alert("Die Bestellnr. muss 12 Zeichen lang sein!");
	return false;
	}
 
Hi

warum so kompliziert? Für soetwas verwendet man reguläre Ausdrücke. Folgendes hat bei mir funktioniert:

Code:
function isValidCode(code){
  return (/^([a-f]{1}\d{7}[A-Z]{4})$/).test(code);
}

Rückgabewerte sind true, falls der Code stimmig ist, oder false, wenn er eben nicht stimmt ;)
 
Vielen Dank für deinen Vorschlag,
leider brauche ich die "kompliziertere" Lösung, weil wir es so im Seminar gemacht haben und morgen die Klausur stattfindet. ;-) Persönlich ärgert mich es aber auch, dass mein Script SO nicht funktioniert...
 
Hallo,

gerade für ne Klausur wären RegEx doch sehr interessant, das zeigt dass du dich mit dem Thema weiter beschäftigt hast ;)
Wenn du es aber trotzdem anders willst:
Ich an deiner Stelle würde nicht so ewig tief verschachtelt Schleifen verweden.
Einfach jedes Zeichen druchgehen und der Reihe nach schauen, in etwa so (ungetestet):

Javascript:
function check(nr) {
  if(nr.length != 12) return false;
  
  for(int i=0; i<12; i++) {
    switch(i) {
      case 0:
        if(nr[i] < 'a' || nr[i] > 'f') return false;
        break;
      case 1: case 2: case 3: case 4:
      case 5: case 6: case 7:
        if(nr[i] < '0' || nr[i] > '9') return false;
        break;
      case 8: case 9: case 10: case 11:
        if(nr[i] < 'A' || nr[i] > 'Z') return false;
        break;
    }
  }

  return true;
}

Gruß
BK
 
Zuletzt bearbeitet:
Wow, schon zwei Alternativen - danke.
So falsch kann mein Script aber nicht sein, da es bis auf diesen einen Fall funktioniert...(Woran liegt es nur?)
Ich bin mir sicher, dass eure Lösungen funktionieren, nur kriege ich dann keine Punkte für die verlangten Schleifen. ;-) (Ja die müssen sein, ich habe den Bewertungsbogen zu dieser Übungsklausur... nur die Lösungen leider nicht. -.-)
 
Hi,

der guten Dinge sind drei.

Für den Fall, dass die Bestellnummer als Zeichenkette übergeben wird, könntest du es hiermit versuchen:
Code:
function check(nr) {
  if(nr.length != 12) return false;

  for(var i=0; i<12; i++) {
    var intCharCode = nr.charCodeAt(i);
    if(i==0){
      if(intCharCode<95 || intCharCode>102)
        return false;
    }else if(i>0 && i<8){
      if(intCharCode<46 || intCharCode>57)
        return false;
    }else{
      if(intCharCode<65 || intCharCode>90)
        return false;
    }
  }

  return true;
}

Ciao
Quaese
 
Dein Skript an sich funktioniert auch ohne Probleme, du hast nur eine kleine Feinheit übersehen:

Du hast diese beiden Schleifen ineinander verschachtelt.
Code:
		for(i=1;i<8;i++)
			{
				for(i=8;i<12;i++)
					{
					}
			}
Mekrst' was? :)

Die zweite Schleife überschreibt den Wert der ersten, da beide die Variable i verwenden.
Wenn du nun die Variable innerhalb der zweiten Schleife einfach j nennst, funktioniert es bei mir auf den ersten Blick super.

Code:
		for(i=1;i<8;i++)
			{
				for(j=8;j<12;j++)
					{
					}
			}
 
OMG, vielen Dank, dass du einen Blick drauf geworfen hast! Könnt dich knutschen. ^^
 

Neue Beiträge

Zurück