이번에는 JS 정기 생년월일 인증 방법(코드 포함)을 만들어 보겠습니다. JS 생년월일 정기 인증 방법을 만들 때 주의사항은 무엇인가요? 다음은 실제 사례를 살펴보겠습니다.
양식 유효성 검사에서는 정규 표현식을 사용하여 생년월일을 확인하는 경우가 많습니다. 이 문서에서는 생년월일을 여러 부분으로 나누고 생년월일 확인을 구현하는 전체 프로세스를 단계별로 소개합니다. 이 글의 내용을 이해한 후에는 정규식 작성에 대한 더 깊은 이해와 더 강한 자신감을 갖게 될 것이라고 믿습니다.
2018-06-15 형식의 생년월일을 연, 월, 일의 세 가지 구성 요소로 나누고 각각 해당하는 정규식을 작성합니다.
var pattern = /^(19|20)\d{2}$/; //输出 true console.log(pattern.test("2008"));여기서//두 개의 슬래시와 그 사이의 문자는 정규식 리터럴의 정의입니다. ^는 문자열의 시작 부분과 일치함을 의미하고, $는 일치함을 의미합니다. 문자열 End; ^(19|20)은 19 또는 20으로 시작하는 문자열과 일치함을 의미하고, 한 쌍의 괄호는 여러 항목을 하나의 단위로 결합하는 데 사용되며, d{2}는 ASCII 숫자를 두 번 일치시키는 것을 의미합니다. 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"));
February Month Regular
먼저 월 정규식의 규칙 정의를 제공합니다.
월은 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 조합 검증
위에서 언급한 연도 규칙성, 월 규칙성, 날짜 규칙성 조합에 따르면 생년월일 정규식은 다음과 같습니다. 형성:
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월은 28일입니다. 평년
평년의 윤년 판단:
새로운 규칙과 지침에 따라 다음과 같은 정규 함수와 테스트가 제공됩니다.
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"));
根据上述分析与测试,我们不但实现了年月日的正则的一般判定,还实现了日期范围及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 중국어 웹사이트의 기타 관련 기사를 참조하세요!