Expression régulière correspondant de la carte de crédit date d'expiration
J'ai le modèle suivant lequel je suis en train d'utiliser pour correspondre à la carte de crédit des dates d'expiration:
(0[1-9]|1[0-2])\/?(([0-9]{4})|[0-9]{2}$)
et je suis en essais sur les chaînes de caractères suivantes:
02/13
0213
022013
02/2013
02/203
02/2
02/20322
Il ne doit correspondre à la première quatre cordes, et les 3 derniers ne devraient pas être un match comme ils ne sont pas valides. Toutefois, la tendance actuelle est également correspondant à la dernière chaîne. Ce que je fais mal?
Peut-être que je suis juste un peu confus, mais êtes-vous sûr que votre parenthèse sont corrects autour de la
Je suis nouveau sur regex - quel est le problème avec les parenthèses?
Voir ma réponse ci-dessous.
[0-9]{4}
région?Je suis nouveau sur regex - quel est le problème avec les parenthèses?
Voir ma réponse ci-dessous.
OriginalL'auteur Snowman | 2013-12-06
Vous devez vous connecter pour publier un commentaire.
Vous êtes absent de démarrage de la ligne d'ancrage
^
et entre parenthèses, sont inégalées.Cela devrait fonctionner:
OU à l'aide de limites de mots:
De Travail De Démonstration: http://regex101.com/r/gN5wH2
L'ancrage de départ a fait le tour, merci.
Fou! Pourquoi le point d'ancrage de changer les choses?
Voir le travail de démonstration et de jouer avec les regex. J'ai créé une démo pour que vous compreniez mieux avec la couleur de codage: regex101.com/r/oN1uO1 Fondamentalement facultatif
/
faire correspondre les 4 derniers chiffres sans ancrage^
Ah, c'est subtil. Sur une note connexe, que testeur, c'est incroyable.
OriginalL'auteur anubhava
Déplacer un droit paran:
La fin de l'ancre n'a pas été appliquée à l' [0-9]{4} option, de sorte que plus de numéros ont été autorisés.
Je vois qu'il correspond à la fin de la dernière chaîne (pas du tout). Ajouter le début de la ligne d'ancrage pour résoudre ce problème. Voir modifier.
OriginalL'auteur forgivenson
Puisque nous parlons d'un de carte de crédit date d'expiration, une fois que vous avez validé la date d'entrée chaîne à l'aide de l'un des beaux - regex expressions dans les autres réponses, vous aurez certainement envie de confirmer que la date n'est pas dans le passé.
De le faire:
YYYYMM
. Par exemple:201409
201312
201409 ge 201312
.En Perl,
ge
est le supérieure ou égale à chaîne opérateur de comparaison. Notez que comme @Dan Cowell conseillé, cartes de crédit généralement expire le dernier jour du mois d'expiration, de sorte qu'il serait inapproprié d'utiliser lagt
(supérieur) de l'opérateur.Alternativement, si votre langue n'a pas de soutien de la comparaison de chaînes dans ce mode, convertir les chaînes de caractères en nombres entiers et au lieu de faire une comparaison arithmétique.
OriginalL'auteur DavidRR