我有以下函数可以验证两种主要格式的日期格式:带分隔符和不带分隔符。
function check_date_format (my_date) {
var regex = /^(\d{1,2})(\/|-)(\d{1,2})(\/|-)(\d{2})$/; //Declare regex for date with separators
var date_array = my_date.match(regex);
if (date_array == null) {
regex = /^(\d{2})(\d{2})(\d{2})$/; //Declare regex for date without separators
date_array = my_date.match(regex);
if (date_array == null) {
return false;
} else {
return true;
}
}
return true;
}
第一个 .match(regex)
返回一个包含 5 个元素的数组:日(1 或 2 位数字)、第一个分隔符(- 或/)、月(1 或 2 位数字)、第二个分隔符(- 或/可以不同于第一个分隔符)和年份(2 位数字)。
第二个 .match(regex)
返回包含 3 个元素的数组:日(2 位数字)、月(2 位数字)和年(2 位数字)。
我试图用这个正则表达式将两者合并:
/^(\d{1,2})(\/|-)(\d{1,2})(\/|-)(\d{2})$|^(\d{2})(\d{2})(\d{2})$/
验证有效,但 my_date
变成了一个包含 8 个单元格的数组,其中前 5 个或后 3 个单元格将未定义,具体取决于正则表达式的哪一部分与模式匹配。
有没有办法合并这两个部分,并根据匹配的部分只返回一个包含 5 个或 3 个单元格的数组?
这是一个fiddle用于测试多种日期格式以及合并和拆分的正则表达式。
最佳答案
这个正则表达式应该做你想做的:
/^(\d{1,2})([\/-]?)(\d{1,2})\2(\d{2})$/
日、月、年分别在捕获组1、3、4中。
我使用反向引用 \2
来确保第二个分隔符(年和月之间)与捕获组 2 中捕获的第一个分隔符相同 ([\/-]?)
。因此,它与您的代码略有不同:它不接受带有混合分隔符的输入,例如 12/3-01
。
关于javascript - 如何组合正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21856191/