ホームページ  >  記事  >  ウェブフロントエンド  >  生年月日の正規表現を実装するための JavaScript の手順

生年月日の正規表現を実装するための JavaScript の手順

亚连
亚连オリジナル
2018-05-26 16:35:281891ブラウズ

この記事では、生年月日をいくつかの部分に分けて、生年月日認証を実装する完全なプロセスを段階的に紹介します。生年月日の正規表現に興味がある友達は参考にしてみてください

要するに

フォーム検証では、生年月日を確認するために正規表現がよく使用されます。この記事では、生年月日をいくつかの部分に分けて、生年月日認証を実装する完全なプロセスを段階的に紹介します。この記事の内容を理解すると、正規表現の作成に対する理解が深まり、自信が持てるようになると思います。


2018-06-15 の形式の生年月日を年、月、日の 3 つの要素に分割し、それぞれに対応する規則的なルールを記述します。

1年の正規

まず、年の正規表現のルール定義を与えます:

  • 年は4桁で構成されます

  • 19と20で始まる年のみを受け入れます

上記のルールに従って、今年の正規表現を書くのは簡単です:

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


ここで// 2 つのスラッシュとその間の文字は正規表現リテラルの定義です。 ^ は文字列の先頭と一致することを意味し、$ は文字列の末尾と一致することを意味します。^(19|20) は 19 または 20 で始まる文字列と一致することを意味し、括弧のペアは複数の項目を 1 つの単位に結合することを意味します。 2} これは、任意の ASCII 数値を 2 回照合することを意味し、d は [0-9] に相当し、{2} は前の項目と 2 回照合することを意味します。

上記の正規表現は、1900 年から 2099 年までの年に一致します。年の範囲を制限したい場合は、次のルールを追加します:

  • 年は 1920 年に始まります

  • 年は 2018 年に終わります

上記のルールに従って、正規表現を次のように変更します:

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"));


最初に月の正規表現のルール定義を与えます:

月 OK 月が 1-12

  • の場合、前に 0

  • を追加できます。次の規則と簡単なテストが与えられます。

    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 日付の正規ルール

まず、日付の正規表現のルール定義を与えます:

日付は 1 ~ 31 です

日付が 1 ~ 9 の場合、前に0を追加できます
  • 上記のルールに従って、次の正規表現と簡単なテストを考えてください:
  • 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 組み合わせの検証

上記の正規表現に従って年、月、日により、生年月日の正規表現が形成されます:

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"));

上記のテスト結果から、主に 2 月の日数が原因で、上記の定期的な検証が完璧ではないことがわかります。 、4月、6月、9月、11月。

5 改善点

ステップ 4 の質問に従って、次のような制限ルールを追加します:

4 月、6 月、9 月、11 月には 31 日はありません

2 月は 28 日あります平年です
  • 2月は29日の閏年です
  • 平年における閏年の判定:
  • 4で割り切れる年は閏年、4で割り切れない年は閏年です4は平年です。しかし、丸 100 年の場合、400 で割り切れる場合のみうるう年となり、それ以外の場合は通常の年となります。

    新しいルールと指示に基づいて、次の通常の関数とテストが提供されます:

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"));

上記の正規表現は String の match() メソッドを使用します。このメソッドの唯一のパラメータは正規表現です。返されるのは、一致する結果で構成される配列です。配列の最初の要素は一致した文字列で、残りの要素は正規表現のかっこで囲まれた部分式です。形式 (:?...) が何度も表示されるこの方法は、項目が 1 つの単位にグループ化されるだけで、そのグループに一致する文字は記憶されないことを意味します。この方法は、年、月、日の項目を規則的に一致する順序で抽出し、後で比較するために使用されます。

上記の分析とテストに基づいて、年、月、日の通常の一般的な決定を実現するだけでなく、日付範囲や2、4、6、9、11月などの特別な月の日の処理も実現しました。 . テストの結果は、設定した目標レベルに達しました。

上記の説明と分析に基づいて、特定のシナリオでのプロジェクトのニーズを満たすために、対応する制限ルールを調整できます。


拡張機能

V2EXネチズンxiangyuecnの意見によると、上記のcheckBirthのロジックコードは多すぎて、確かに少し低いです。上記のコードを次のように更新します。

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;
}

上記は、私が皆さんのためにまとめたもので、将来皆さんのお役に立てれば幸いです。

関連記事:

Ajaxグローバルローディングボックスの設定(ローディングエフェクト)

30分でリバースAjaxをサクッとマスター

Ajaxはスマートプロンプト検索機能を実装

以上が生年月日の正規表現を実装するための JavaScript の手順の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。