Regex für Discover Kreditkarte

8

Ich habe diese Frage , aber für die Discover-Karte sind die Anfangsziffern 6011, 622126-622925, 644-649, 65 und nicht nur 6011, 65 . ( Quelle )

Für Discover-Karten habe ich diesen Regex aus der Frage ^6(?:011|5[0-9]{2})[0-9]{12}$

entnommen

Ich habe es so modifiziert, dass es 6011 , 644-649 & amp; 65 , aber für 622126-622925 , ist das Bauen von Regex schwierig, weil ich schlechte Regex-Fähigkeiten habe.

Ich habe diese Regex bisher 6(?:011|5[0-9]{2}|[4][4-9][0-9]|[2]{2}[1-9])[0-9]{2}$ , aber es wird nur nach 622[1-9]** gesucht.

Wie ändere ich es so, dass es nur zwischen 622126-622925 für 622*** case akzeptiert?

    
Ashfame 21.11.2012, 19:27
quelle

3 Antworten

9

Hier ist Ihre Regex (Demo) :

%Vor%

Es ist unnötig zu sagen, dass ich das nicht schön oder einfach pflegen werde. Ich würde empfehlen, die Zahl als Integer zu analysieren und Ihre Programmiersprache zu verwenden, um die Überprüfungen durchzuführen.

Sie sollten auch den Luhn-Algorithmus verwenden, um zu überprüfen, ob die Kreditkartennummer gültig ist, und solange Sie können theoretisch mache das mit regex, es wäre um ein Vielfaches schlechter als das.

Gestatten Sie mir, Ihnen zu zeigen, wie ich Schritt für Schritt zu dieser Monstrosität gekommen bin. Zuerst, hier ist, wie Sie jeden dieser Bereiche zusammenpassen:

%Vor%

Nun möchten Sie die restlichen Ziffern anpassen:

%Vor%

Jetzt können Sie alle vier kombinieren und Anfangs- und Endezeilenanker hinzufügen:

%Vor%

Das letzte Produkt oben ist eine etwas kompaktere Version der vorherigen Regex, und ich habe auch Gruppen nicht erfassen lassen (das ist es, wofür diese ?: sind).

    
NullUserException 21.11.2012, 19:44
quelle
0

Hier sind Ihre Optionen:

  1. Hack dir deinen Weg durch und erstelle einen wirklich komplizierten Regex. Regexes sind für diese Art von Integer-Vergleich nicht geeignet, daher müssen Sie lange, unkompliziert und nicht erreichbar sein. Siehe Regex zur Überprüfung der Nummer unter einem Wert und ähnliche SO-Fragen dazu Thema.
  2. Verwenden Sie den Ganzzahlvergleich in Ihrem Code.

Als Referenz wäre eine solche komplizierte Regex

62212[6-9]|6221[3-9]|622[1-8]|62291|62292[1-5]

    
djechlin 21.11.2012 19:35
quelle
0

selbst dieses Ticket ist vor drei Jahren, ich habe die gleiche Aufgabe und würde gerne eine Regex für 622126-622925 teilen:)

%Vor%

welches negatives Lookbehind der Breite Null verwendet, um nicht erwartete Zahl auszuschließen

    
Wei 30.06.2016 08:47
quelle

Tags und Links