
这次,我将为您带来出生正则表达式的js验证日期. 实现出生正则表达式的js验证日期有哪些注意事项?以下是一个实际案例. 让我们看一下.
在表单验证中,经常使用正则表达式检查出生日期. 本文将出生日期分为几个部分,并逐步介绍了实现出生日期的完整过程. 我相信,在您理解了本文的内容之后,您将对编写正则表达式有更深入的了解和信心.

我们将出生日期以2018-06-15的形式分为三个部分: 年,月和日,并编写相应的正则化.
首先给出年份正则表达式的规则定义:
根据上述规则,很容易编写年份的正则表达式:

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"));
首先给出月份正则表达式的规则定义:

根据上述规则,给出了以下常规和简单测试:
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月的天数.
根据步骤4中的问题,添加限制规则如下:
正常年份leap年的判断:
可以被4整除的年份是a年,不能被4整除的年份是普通年份. 但是正则表达式验证,如果是一百年,则只有被400整除的年份是a年,否则是正常年份.
根据新添加的规则和说明,给出了以下常规功能和测试:

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
枷锁在一根根往自己脖子上套