La Date de naissance de validation en utilisant des expressions régulières
Ma Question: j'ai trouvé cet exercice très difficile. Je suis un peu coincé sur la Date de Naissance.
Défi: Essayez de venir avec les expressions régulières pour valider la suite de chaînes de texte (ne vous inquiétez pas compte de la casse):
- Premier nom — devrait être composé de l'anglais standard des lettres et entre un et dix caractères.
- Initiale — devrait être composé de l'anglais standard de lettres et d'être un seul des caractères de longueur.
- Dernier nom doit être composé de l'anglais standard lettres plus l'apostrophe et entre deux et dix caractères.
- Date de naissance devrait tomber entre 1/1/1900 et 12/31/2099, et devrait être l'un des formats de date suivants: jj/mm/aaaa, jj-mm-aaaa ou jj.mm.aaaa.
J'ai pu trouver pour les trois premiers noms. Mais je suis bloqué sur la Date de Naissance.
"^[a-z]{1,10}$", //First name
"^[a-z]$", //Middle initial
"^[a-z']{2,10}$", //Last name
S'il vous plaît aider moi.
Ces exigences pour le format de date sont un peu confus. Les dates nommé pour la plage acceptable, vous avez le mois lieu avant le jour de l' (indiqué par 12/31) pourtant, dans les formats de date, le jour vient en premier. Aussi, la date la plus ancienne (1/1/1900), il est écrit que j/m/aaaa. La regex besoin de correspondre à un seul chiffre valeurs pour le mois et le jour, ou serait-ce la date apparaissent comme 01/01/1900?
Juste hier, j'ai écrit un blog sur la correspondance de nombre-les plages de avec la regex, qui s'applique à l'année-la partie de ton problème (bien que, je l'avoue, de 1900 à 2099 est assez facile, comme indiqué dans certaines de vos réponses): aliteralmind.wordpress.com/2014/03/02/regex_numeric_range
Il n'est pas anodin, voir ma réponse ici: stackoverflow.com/a/3873172/372239
Juste hier, j'ai écrit un blog sur la correspondance de nombre-les plages de avec la regex, qui s'applique à l'année-la partie de ton problème (bien que, je l'avoue, de 1900 à 2099 est assez facile, comme indiqué dans certaines de vos réponses): aliteralmind.wordpress.com/2014/03/02/regex_numeric_range
Il n'est pas anodin, voir ma réponse ici: stackoverflow.com/a/3873172/372239
OriginalL'auteur NinjaG | 2014-03-03
Vous devez vous connecter pour publier un commentaire.
Pour les regex pour les dates, voir le lien: Regex Tutoriel
Mais je pense que l'exemple fonctionne.
dd/mm/yyyy
pasmm/dd/yyyy
. Aussi, il correspond à02/31/1900
OriginalL'auteur Jeff
Il y a un couple de points à traiter ici:
La première semble possible avec le groupement de et ou. Par exemple, vous pourrait correspondre à toutes les valeurs de 1 à 12 avec:
Et de 1900 à 2099 avec
Le deuxième bit est juste une question de mettre les parties appropriées du modèle dans le bon endroit.
La troisième partie peut être accompli avec une référence arrière. D'abord, vous avez un sous-groupe de faire correspondre les caractères de séparation comme suit:
Ensuite, vous devez vous assurer d'obtenir le même personnage plus tard dans le match. C'est fait en spécifiant un antislash suivi par le numéro du groupe. Par exemple:
Enfin, nous voulons faire en sorte que personne ne spécifie 31 juin 1925 ou 30 février 1994. C'est absolument horrible à réaliser dans les regex et devrait rapidement nous envoyer courir dans les collines. Regex n'est pas la bonne solution à ce problème.
Donc, en laissant cela de côté, nous pouvons résoudre les trois premières parties avec une regex qui ressemble à:
Notez l'utilisation de ?: pour faire certains regroupements de ne pas obtenir un submatch de sorte que nous n'avons pas à traiter avec la submatches qui nous intéresse. N'est pas strictement nécessaire, mais cela le rend plus clair. Si vous avez quitté les personnes sur le séparateur serait le deuxième sous-groupe, pas le premier.
OriginalL'auteur Coenwulf
il n'a pas. mais vous auriez besoin d'écrire un assez long et laid regex pour l'en empêcher.
ou utiliser les backrefs (en supposant que le moteur supporte)
Le format demandé est
dd/mm/yyyy
pasmm/dd/yyyy
. Aussi, il correspond à02/31/1900
OriginalL'auteur La-comadreja
Pour la date de naissance, vous match sur le début de la chaîne, puis pour le mois partie que vous avez une capture d'un groupe de correspondre à l'un des 01, 02, 03, 04, 05, 06, 07, 08, 09, 10, 11 ou 12, suivie par une autre capture d'un groupe pour le match soit -, /
Pour la partie jour, vous avez besoin pour capturer groupe de correspondre à l'une de 01, 02, ... le 29, 30 ou 31, suivie par la capture d'un groupe pour le match soit -, /ou
Date de naissance:
Le format demandé est
dd/mm/yyy
pasmm/dd/yyyy
. Aussi, il correspond à02/31/1900
OriginalL'auteur KJC2009
Essayer
Le format demandé est
dd/mm/yyyy
pasmm/dd/yyyy
. Aussi, il correspond à02/31/1900
OriginalL'auteur Superman2013
Pour la date de naissance, le match sur le début de la chaîne, puis pour le mois partie que vous avez une capture d'un groupe de correspondre à l'un des 01, 02, 03, 04, 05, 06, 07, 08, 09, 10, 11 ou 12, suivie par une autre capture d'un groupe pour le match soit -, /
Je pense que cet exemple fonctionne.
OriginalL'auteur awesome sushi
essayer cette
OriginalL'auteur naveen agrahari