2012-12-17 2 views
5

Der Versuch, eine Kunden-jQuery-Validierungsmethode hinzuzufügen, die grundsätzlich den Kartentyp und die Kreditkartennummer auf Gültigkeit prüft.jQuery Validator Kreditkartennummer + Typ Übereinstimmung

dh. Wenn der Typ MasterCard ist, wenn die Kartennummer nicht mit 5 beginnt, ist sie ungültig oder wenn der Typ Visa ist, wenn die Kartennummer nicht mit 4 beginnt, ist sie ungültig. Meine Firma berechnet nur MC oder Visa, also werden keine anderen benötigt.

$.validator.addMethod("CCNumber", function(value, element, param) { 
    if (param == "MasterCard") { 
    return value.substring(0,1) != 5; 
    } 
    else if (param == "Visa") { 
    return value.substring(0,1) != 4; 
    } 
}); 

es hier aufrufen:

cardnumber: { 
    required: true, 
    creditcard: true, 
    minlength: 13, 
    maxlength: 16, 
    digits: true, 
    CCNumber: function(){ return $('#cardtype').val(); } 
}, 

Und die Nachricht ...

cardnumber: { 
    required: "Please enter a valid credit card number", 
    minlength: "Please enter a valid credit card number", 
    maxlength: "Please enter a valid credit card number", 
    digits: "Your credit card number cannot contain spaces.", 
    CCNumber: "WRONG" 
}, 

schließlich die HTML:

<select name="cardtype" id="cardtype"> 
    <option value="MasterCard">MasterCard</option> 
    <option value="Visa">Visa</option> 
</select> 

ich nie ein jQuery geschrieben habe Methode vorher, aber hier passiert nichts. Ich bin mir nicht ganz sicher, was ich falsch gemacht habe, da ich versucht habe, andere Methoden zu betrachten, aber nichts finden konnte.

+0

Warum fragen Sie nach dem Typ überhaupt? – SLaks

+0

@FergusMorrow: Ja. Das OP sollte es einfach loswerden. – SLaks

+1

Was soll "sub" tun? Meintest du "substring"? –

Antwort

2

Die jQuery Validation plugin verfügt bereits über zusätzliche Methoden für solche Dinge.

Das folgende ist die Standardmethode, die im "Additional Methods" file verwendet wird, aber dann für nur Visa & Mastercard unten redigiert wird.

jQuery.validator.addMethod("creditcardtypes", function(value, element, param) { 
    if (/[^0-9-]+/.test(value)) { 
     return false; 
    } 

    value = value.replace(/\D/g, ""); 

    var validTypes = 0x0000; 

    if (param.mastercard) 
     validTypes |= 0x0001; 
    if (param.visa) 
     validTypes |= 0x0002; 

    if (validTypes & 0x0001 && /^(5[12345])/.test(value)) { //mastercard 
     return value.length == 16; 
    } 
    if (validTypes & 0x0002 && /^(4)/.test(value)) { //visa 
     return value.length == 16; 
    } 
    return false; 
}, "Please enter a valid credit card number."); 
+0

Können Sie ein Beispiel für die Verwendung der creditcardtypes-Methode als Teil der Validierungsregeln zeigen? –

+0

@dirt, der Parameter, den Sie an diese Methode übergeben, ist 'visa' oder' mastercard' basierend auf einer Auswahlliste, und dann wird das Eingabefeld nur für diesen Kartentyp validiert. Das ist sowieso die Idee. – Sparky

-2

sub() ist keine JavaScript-Funktion. Die Funktion, nach der Sie suchen, ist substring(). Noch einfacher wäre aber charAt (0), da du nur das erste Zeichen willst.

+0

Bitte formatieren Sie Ihren Code richtig. – Sparky