이번에는 JS에서 정규식을 사용하여 생년월일을 판별하는 방법을 알려드리겠습니다. JS에서 정규식을 사용하여 생년월일을 판별할 때 주의사항은 무엇인가요?
양식 확인에서는 생년월일을 확인하기 위해 정규식을 자주 사용합니다. 이 문서에서는 생년월일을 여러 부분으로 나누고 생년월일 확인을 구현하는 전체 프로세스를 단계별로 소개합니다. 이 글의 내용을 이해한 후에는 정규식 작성에 대한 더 깊은 이해와 더 강한 자신감을 갖게 될 것이라고 믿습니다.
2018-06-15 형식의 생년월일을 연, 월, 일의 세 가지 구성 요소로 나누고 각각 해당하는 정규식을 작성합니다.
var pattern = /^(19|20)\d{2}$/; //输出 true console.log(pattern.test("2008"));여기서//두 개의 슬래시와 그 사이의 문자는 정규식 리터럴의 정의입니다. ^는 문자열의 시작 부분과 일치함을 의미합니다.
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
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"));
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 월의 일수에 대한 질문입니다.
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!