• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

[ERLEDIGT] test einer RegEx greift nicht?

Chronos

Aktives Mitglied
Hallo Forum,

ich bin gerade dabei mir ein Textfeld zu erstellen, welches bei Eingabe auf den Typ einer Kreditkarte prüft,
also nur ob es eine Visa, Mastercard usw. ist.

Das ganze eigentlich genauso wie hier:

http://bradfrost.com/demo/single-cc/
http://bradfrost.com/demo/single-cc/assets/scripts/app.js ab Zeile 24

Ich möchte das ganze ohne jQuery schreiben und bin jetzt an dem Punkt, an dem ich den übergebenen Wert mit dem regulären Ausdrücken im Objekt vergleiche.

Wenn keiner der Ausdrücke zutrifft, möchte ich einfach nur 'default' zurückgeben.

Code:
window.onload = function(){
    getTextfield();
};

function getTextfield() {
    var txtField = document.getElementById('cc-field');
   
    txtField.addEventListener("keyup", function(){
        console.log(checkCC(this.value));
    });
}

function checkCC(number) {  
    // Object with cc-RegEx'
    var ccRegEx = {
        'visa':         /^4/,
        'mastercard':   /^5[1-5]/
    };
  
    for (var key in ccRegEx) {
        // Pattern to test, String
        if (ccRegEx[key].test(number)) {
            return key;
        } else {
            return 'default';
        }
    }   
}

Wenn ich 4 eingebe bekomme ich 'visa' zurück, wenn ich 5 eingebe bekomme ich 'default' zurück, was noch richtig wäre, wenn ich jetzt allerdings noch zu der 5 eine 1-5 eingebe, bekomme ich noch ein mal 'default' zurück.

Das komische ist jetzt, wenn ich den else-Zweig weg lasse bekomme ich bei 5 default und dann bei noch mal 5 also 55 'mastercard' aber wieso, das kann doch gar nicht sein?

Hier noch ein JS Bin dazu: http://jsbin.com/cofewa/1/edit?html,js,console,output

Ich verstehe mein Problem ehrlich gesagt gar nicht :D wäre echt froh wenn mir jemand sagt, was ich falsch mache.
 
Werbung:
okay Denkfehler :D ... man muss einfach nur immer das zurückgeben, was eintritt wenn die RegEx nicht greift:
Edit: bzw. ich iteriere ja nur über das erste Schlüsselpaar und verlasse die Funktion, das war der Fehler.

Code:
function checkCC(number) { 
    // Object with cc-RegEx'
    var ccRegEx = {
        'visa':         /^4/,
        'mastercard':   /^5[1-5]/
    };
 
    for (var key in ccRegEx) {
        // Pattern to test, String
        if (ccRegEx[key].test(number)) {
            return key;
        }
    }
  
    return 'default';
}
 
Zuletzt bearbeitet:
Zurück
Oben