ホームページ > 記事 > ウェブフロントエンド > jsは生年月日の正規表現を検証します
今回は生年月日の正規表現のjs検証を紹介します。生年月日の正規表現のjs検証を実装する際の注意事項は何ですか?実際のケースを見てみましょう。
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 年までの年に一致します。年の範囲を制限したい場合は、次のルールを追加します:
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"));
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"));
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"));
5 改善点
4月、6月、9月、11月には31日はありません
2月は28日あります平年です
2月は29日の閏年です
平年における閏年の判定:
新しいルールと指示に基づいて、次の通常の関数とテストが提供されます:
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()方法,该方法唯一参数是一个正则表达式,返回的是一个由匹配结果组成的数组。数组的第一个元素就是匹配的字符串,余下的元素则是正则表达式中用圆括号括起来的子表达式。而(:?...)这种形式多次出现,该种方式表示只是把项组合到一个单元,但不记忆与该组相匹配的字符。利用该种方法按照正则匹配的顺序分别取出了年月日项,以便后序比较。
根据上述分析与测试,我们不但实现了年月日的正则的一般判定,还实现了日期范围及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中文网其它相关文章!
推荐阅读:
以上がjsは生年月日の正規表現を検証しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。