This article divides the date of birth into several parts and introduces step by step the complete process of implementing a date of birth verification. Friends who are interested in birth date regular expressions can refer to it
In form validation, regular expressions are often used. Do birth date verification. This article divides the date of birth into several parts and introduces step by step the complete process of implementing a date of birth verification. I believe that after understanding the content of this article, you will have a deeper understanding and stronger confidence in writing regular expressions.
We divide a birth date in the form of 2018-06-15 into three components: year, month and date, and write the corresponding of regularity.
First give the rule definition of year regular expression:
The year consists of 4 digits
Only accepts years starting with 19 and 20
According to the above rules, it is easy to write the regular expression of the year:
var pattern = /^(19|20)\d{2}$/; //输出 true console.log(pattern.test("2008"));
including two / / The slash and the characters in between are the definition of regular expression literals; ^ means matching the beginning of the string, $ means matching the end of the string; ^(19|20) means matching the string starting with 19 or 20, one The function of parentheses is to combine several items into one unit; \d{2} means matching any ASCII number 2 times, \d is equivalent to [0-9], and {2} means matching the previous item 2 times. .
The above regular expression can match the years from 1900 to 2099. If you want to limit the range of years, add the following rules:
Start of year Ended in 1920
year ended in 2018
According to the above rules, change the regular expression as follows:
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"));
From the above test results, it can be seen that the above regularity verification is not perfect, mainly because Questions about the number of days in 2, 4, 6, 9 and 11 months.
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"));
Based on the above analysis and testing, we not only realized the regular general determination of year, month and day, but also realized the processing of date range and special month days such as 2, 4, 6, 9, and November. , the test results reached the goals we set.
According to the opinion of V2EX netizen xiangyuecn, the above logic code of checkBirth is too much, which is indeed a bit low. Now update the above code as follows:
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; }
Configuration of Ajax global loading box (Loading effect)
Quickly master reverse Ajax in 30 minutes Ajax implements intelligent prompt search function
The above is the detailed content of JavaScript steps to implement a regular expression of date of birth. For more information, please follow other related articles on the PHP Chinese website!