Maison  >  Article  >  interface Web  >  Étapes JavaScript pour implémenter une expression régulière de date de naissance

Étapes JavaScript pour implémenter une expression régulière de date de naissance

亚连
亚连original
2018-05-26 16:35:281961parcourir

Cet article divise la date de naissance en plusieurs parties et présente étape par étape le processus complet de mise en œuvre d'une vérification de la date de naissance. Pour ceux qui sont intéressés par les expressions régulières de date de naissance, veuillez vous référer à

En bref

Dans la validation de formulaire, les expressions régulières sont souvent utilisées. Faites une vérification de la date de naissance. Cet article divise la date de naissance en plusieurs parties et présente étape par étape le processus complet de mise en œuvre d'une vérification de la date de naissance. Je pense qu'après avoir compris le contenu de cet article, vous aurez une compréhension plus profonde et une plus grande confiance dans l'écriture d'expressions régulières.


Nous divisons une date de naissance sous la forme du 15/06/2018 en trois composantes : année, mois et date, et écrivons la correspondance de régularité.

Expression régulière d'un an

Donnez d'abord la définition de la règle de l'expression régulière de l'année :

  • L'année est composée de 4 chiffres

  • N'accepte que les années commençant par 19 et 20

D'après les règles ci-dessus, il est facile d'écrire l'expression régulière de l'année :

var pattern = /^(19|20)\d{2}$/;
//输出 true
console.log(pattern.test("2008"));


où/ / Deux barres obliques et les caractères intermédiaires sont la définition des littéraux d'expression régulière ; ^ signifie correspondre au début de la chaîne, $ signifie correspondre à la fin de la chaîne ^(19|20) signifie correspondre à la chaîne commençant par 19 ; ou 20 , une paire de parenthèses est utilisée pour combiner plusieurs éléments en une seule unité ; et d{2} signifie correspondre à n'importe quel numéro ASCII 2 fois, d est équivalent à [0-9] et {2} signifie correspondre à l'élément précédent 2 ; fois.

L'expression régulière ci-dessus peut correspondre aux années de 1900 à 2099. Si vous souhaitez limiter la plage des années, ajoutez les règles suivantes :

  • Début de l'année En 1920

  • L'année s'est terminée en 2018

Selon les règles ci-dessus, l'expression régulière est modifiée comme suit :

var pattern = /^(19[2-9]\d{1})|(20((0[0-9])|(1[0-8])))$/;
//输出 false
console.log(pattern.test("1916"));
//输出 true
console.log(pattern.test("2008"));
//输出 false
console.log(pattern.test("2022"));


Régulier de février

Donnez d'abord la définition de la règle de l'expression régulière du mois :

  • Le mois peut être compris entre 1 et 12

  • Si le mois est compris entre 1 et 9, alors 0 peut être ajouté devant

Selon les règles ci-dessus, les règles régulières et les tests simples suivants sont donnés :

var pattern = /^((0?[1-9])|(1[0-2]))$/;
//输出 false
console.log(pattern.test("19"));
//输出 true
console.log(pattern.test("02"));
//输出 true
console.log(pattern.test("2"));
//输出 true
console.log(pattern.test("11"));

3 Expression régulière de date

Donnez d'abord la règle définition de l'expression régulière de date :

  • La date peut être 1-31

  • Si la date est 1-9, vous pouvez ajouter 0 dans front

Selon les règles ci-dessus, donnez Les règles régulières et les tests simples suivants sont donnés :

var pattern = /^((0?[1-9])|([1-2][0-9])|30|31)$/;
//输出 false
console.log(pattern.test("32"));
//输出 true
console.log(pattern.test("02"));
//输出 true
console.log(pattern.test("2"));

4 Vérification de la combinaison

Selon l'expression régulière ci-dessus de l'année, du mois et de la date, l'expression régulière de la date de naissance est formée :

var pattern = /^((19[2-9]\d{1})|(20((0[0-9])|(1[0-8]))))\-((0?[1-9])|(1[0-2]))\-((0?[1-9])|([1-2][0-9])|30|31)$/;
//输出 true
console.log(pattern.test("1923-3-18"));
//输出 true
console.log(pattern.test("1923-4-31"));
//输出 true
console.log(pattern.test("1923-2-29"));
//输出 true
console.log(pattern.test("2016-2-29"));

Comme le montrent les résultats des tests ci-dessus, ce qui précède La vérification régulière n'est pas encore parfaite, principalement en raison du nombre de jours en février, avril, juin, Septembre et novembre.

5 Amélioration

Selon la question de l'étape 4, ajoutez les règles limitantes comme suit :

  • Il n'y a pas de 31ème jour en avril, juin, septembre et novembre

  • Février compte 28 jours dans les années ordinaires

  • Février en compte 29 jours dans les années bissextiles

Jugement des années bissextiles dans les années ordinaires :

Une année qui est également divisible par 4 est une année bissextile, et une année qui n'est pas divisible à 4 ans est une année ordinaire. Mais s’il s’agit d’une centaine d’années complètes, ce n’est une année bissextile que si elle est divisible par 400, sinon c’est une année ordinaire.

Sur la base des nouvelles règles et instructions, les fonctions et tests réguliers suivants sont donnés :

var checkBirth = function (val) {
  var pattern = /^((?:19[2-9]\d{1})|(?:20(?:(?:0[0-9])|(?:1[0-8]))))\-((?:0?[1-9])|(?:1[0-2]))\-((?:0?[1-9])|(?:[1-2][0-9])|30|31)$/;
  var result = val.match(pattern);
  if(result != null) {
    var iYear = parseInt(result[1]);
    var month = result[2];
    var date = result[3];
    if(/^((0?[469])|11)$/.test(month) && date == '31') {
      return false;
    } else if(parseInt(month) == 2){
      if((iYear % 4 ==0 && iYear % 100 != 0) || (iYear % 400 == 0)) {
        if(date == '29') {
          return true;
        }
      }
      if(parseInt(date) > 28) {
        return false;
      }
    }
    return true;
  }
  return false;
}
//输出 true
console.log(checkBirth("1923-3-18"));
//输出 false 4月份没有31日
console.log(checkBirth("1923-4-31"));
//输出 false 平年
console.log(checkBirth("1923-2-29"));
//输出 true 闰年
console.log(checkBirth("2016-2-29"));

La chaîne est utilisée dans ce qui précède expressions régulières La méthode match(), le seul paramètre de cette méthode est une expression régulière et renvoie un tableau composé de résultats correspondants. Le premier élément du tableau est la chaîne correspondante et les éléments restants sont les sous-expressions entre parenthèses dans l'expression régulière. La forme (:?...) apparaît plusieurs fois. Cette méthode signifie que les éléments ne sont regroupés qu'en une seule unité, mais les caractères correspondant au groupe ne sont pas mémorisés. Cette méthode est utilisée pour extraire les éléments de l’année, du mois et du jour dans l’ordre de correspondance régulière pour une comparaison ultérieure.

Sur la base de l'analyse et des tests ci-dessus, nous avons non seulement réalisé la détermination générale régulière de l'année, du mois et du jour, mais avons également réalisé le traitement des plages de dates et des jours dans des mois spéciaux tels que 2, 4. , 6, 9 et novembre , les résultats des tests ont atteint les objectifs que nous nous étions fixés.

Sur la base de l'explication et de l'analyse ci-dessus, nous pouvons ajuster les règles limites correspondantes pour répondre aux besoins du projet dans des scénarios spécifiques.

Extension

Selon l'avis de l'internaute V2EX xiangyuecn, le code logique ci-dessus de checkBirth est trop, ce qui est en effet un peu faible . Mettez maintenant à jour le code ci-dessus comme suit :

var checkBirth = function (val) {
  var pattern = /^((19[2-9]\d{1})|(20((0[0-9])|(1[0-8]))))\-((0?[1-9])|(1[0-2]))\-((0?[1-9])|([1-2][0-9])|30|31)$/;
  if(pattern.test(val)) {
    var date = new Date(val);
    var month = val.substring(val.indexOf("-")+1,val.lastIndexOf("-"));
    return date && (date.getMonth()+1 == parseInt(month));
  }
  return false;
}

Ce qui précède est ce que j'ai compilé pour tout le monde. J'espère qu'il sera utile à tout le monde à l'avenir.

Articles associés :

Configuration de la boîte de chargement globale Ajax (Effet de chargement)

Maîtrisez rapidement l'Ajax inversé en 30 minutes

Ajax implémente une fonction de recherche d'invite intelligente

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn