>  기사  >  웹 프론트엔드  >  js 생년월일 정규식 확인

js 생년월일 정규식 확인

php中世界最好的语言
php中世界最好的语言원래의
2018-05-03 15:41:3611923검색

이번에는 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中文网其它相关文章!

    推荐阅读:

    Vue.js中computed与methods使用与区别

    js-cookie使用步骤详解

위 내용은 js 생년월일 정규식 확인의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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