b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

js出生日期正则表达式验证

电脑杂谈  发布时间:2020-07-12 01:03:21  来源:网络整理

验证正则表达式_正则表达式验证_js正则表达式验证语法

这次,我将为您带来出生正则表达式js验证日期. 实现出生正则表达式的js验证日期有哪些注意事项?以下是一个实际案例. 让我们看一下.

在表单验证中,经常使用正则表达式检查出生日期. 本文将出生日期分为几个部分,并逐步介绍了实现出生日期的完整过程. 我相信,在您理解了本文的内容之后,您将对编写正则表达式有更深入的了解和信心.

我们将出生日期以2018-06-15的形式分为三个部分: 年,月和日,并编写相应的正则化.

首先给出年份正则表达式的规则定义:

根据上述规则,很容易编写年份的正则表达式:

验证正则表达式_正则表达式验证_js正则表达式验证语法

var pattern = /^(19|20)\d{2}$/;
//输出 true
console.log(pattern.test("2008"));

//其中两个斜杠以及中间的字符是正则表达式直接数量的定义; ^表示匹配字符串的开头,$表示匹配字符串的结尾; ^(19 | 20)表示与19匹配或以20开头的字符串,使用一对括号将多个项组合为一个单元;和\ d {2}表示匹配任何ASCII数字两次,\ 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"));

首先给出月份正则表达式的规则定义:

js正则表达式验证语法_验证正则表达式_正则表达式验证

根据上述规则,给出了以下常规和简单测试:

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"));

根据上述的年规律,月规律和日期规律,将出生日期的正则表达式组合为:

验证正则表达式_正则表达式验证_js正则表达式验证语法

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月的天数.

根据步骤4中的问题,添加限制规则如下:

正常年份leap年的判断:

可以被4整除的年份是a年,不能被4整除的年份是普通年份. 但是正则表达式验证,如果是一百年,则只有被400整除的年份是a年,否则是正常年份.

根据新添加的规则和说明,给出了以下常规功能和测试:

js正则表达式验证语法_正则表达式验证_验证正则表达式

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逻辑代码过多正则表达式验证,确实有点低. 上面的代码现在更新如下:

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中文网络上的其他相关文章!


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-277067-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      • 丁持正
        丁持正

        枷锁在一根根往自己脖子上套

      每日福利
      热点图片
      拼命载入中...