ホームページ  >  記事  >  ウェブフロントエンド  >  JS は通常のルールを使用して生年月日を決定します

JS は通常のルールを使用して生年月日を決定します

php中世界最好的语言
php中世界最好的语言オリジナル
2018-05-09 09:33:553297ブラウズ

今回はJSで正規表現を使って生年月日を調べる方法についてお届けします。JSで正規表現を使って生年月日を調べる場合の注意点は何ですか?実際の事例を見てみましょう。

要するに

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

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

1 Year Regular

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

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

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

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

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

ここで、 / / 2 つのスラッシュとそれらの間の文字は正規表現リテラルの定義です。 ^ は文字列 の先頭と一致することを意味し、$ は文字列の先頭と一致することを意味します。文字の一致; ^(19|20) は 19 または 20 で始まる文字列の一致を意味し、括弧のペアは複数の項目を 1 つの単位に結合するために使用され、d{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"));

2 月の月の定期

まず、月の正規表現のルール定義を指定します:

  • 月は 1 ~ 12 です

  • 月が1〜9の場合、前に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つの組み合わせ検証

上記の年規則性、月規則性、日付規則性の組み合わせによると、生年月日の正規表現は上記のテスト結果から、上記の規則性検証は完全ではないことがわかります。主に 2、4、6、9、11 月の日数の問題です。

5 改善点

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

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

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

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

根据上述分析与测试,我们不但实现了年月日的正则的一般判定,还实现了日期范围及2,4,6,9,11月等特殊月份天数的处理,测验结果达到了我们设定的目标。

根据上述讲解和分析,我们可以调整相应的限定规则,使其满足于特定场景下的项目需要。

延伸

根据 V2EX网友 xiangyuecn 的意见,上述checkBirth的逻辑代码太多,确实有点 low。现将上述代码更新如下:

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

相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!

推荐阅读:

Angular集成三方UI框架、控件使用详解

JS常见函数使用详解

以上がJS は通常のルールを使用して生年月日を決定しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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