>  기사  >  웹 프론트엔드  >  JS는 일반 규칙을 사용하여 생년월일을 결정합니다.

JS는 일반 규칙을 사용하여 생년월일을 결정합니다.

php中世界最好的语言
php中世界最好的语言원래의
2018-05-09 09:33:553561검색

이번에는 JS에서 정규식을 사용하여 생년월일을 판별하는 방법을 알려드리겠습니다. JS에서 정규식을 사용하여 생년월일을 판별할 때 주의사항은 무엇인가요?

간단히 말하면

양식 확인에서는 생년월일을 확인하기 위해 정규식을 자주 사용합니다. 이 문서에서는 생년월일을 여러 부분으로 나누고 생년월일 확인을 구현하는 전체 프로세스를 단계별로 소개합니다. 이 글의 내용을 이해한 후에는 정규식 작성에 대한 더 깊은 이해와 더 강한 자신감을 갖게 될 것이라고 믿습니다.

2018-06-15 형식의 생년월일을 연, 월, 일의 세 가지 구성 요소로 나누고 각각 해당하는 정규식을 작성합니다.

1 년 정기 정기 regular 최초의 규칙 정의를 정기적 인 표현의 규칙 정의를 제공합니다. 위의 규칙에서는 올해의 정규식을 작성하는 것이 쉽습니다.
var pattern = /^(19|20)\d{2}$/;
//输出 true
console.log(pattern.test("2008"));
여기서//두 개의 슬래시와 그 사이의 문자는 정규식 리터럴의 정의입니다. ^는 문자열의 시작 부분과 일치함을 의미합니다.

, $는 문자 일치 문자열의 끝은 19 또는 20으로 시작하는 문자열 일치를 의미하고, 괄호 쌍은 여러 항목을 하나의 단위로 결합하는 데 사용되며, 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"));
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, 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() 메서드를 사용합니다. 이 메서드의 유일한 매개 변수는 정규식이며 일치 항목을 반환합니다. 결과의 배열입니다. 배열의 첫 번째 요소는 일치하는 문자열이고 나머지 요소는 정규식에서 괄호로 묶인 하위 표현식입니다. (:?...) 형태가 여러번 나타나는데, 이 방법은 항목을 하나의 단위로만 그룹화하고 그룹에 일치하는 문자를 기억하지 않는다는 의미입니다. 이 방법은 후속 비교를 위해 정규 매칭 순서대로 연, 월, 일 항목을 추출하는 데 사용됩니다.
  • 根据上述分析与测试,我们不但实现了年月日的正则的一般判定,还实现了日期范围及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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.