Javascript 如何组合正则表达式
我有下面的函数,它用两种主要格式验证日期格式:带分隔符和不带分隔符Javascript 如何组合正则表达式,javascript,regex,Javascript,Regex,我有下面的函数,它用两种主要格式验证日期格式:带分隔符和不带分隔符 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) {
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位)、第一个分隔符(-or/)、月(1或2位)、第二个分隔符(-or/可以不同于第一个分隔符)和年(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个单元格的数组
下面是一个用于测试几种日期格式以及合并和拆分正则表达式的示例。此正则表达式应该满足您的要求:
/^(\d{1,2})([\/-]?)(\d{1,2})\2(\d{2})$/
第1、3、4组分别为日、月、年
我使用backreference
\2
来确保第二个分隔符(年和月之间)与捕获组2中捕获的第一个分隔符相同([\/-])。因此,它与您的代码稍有不同:它不接受带有混合分隔符的输入,例如12/3-01
,如果删除分隔符周围的括号,它们将不会在结果中形成匹配组。@CompuChip:你在说什么?对不起,我错过了您关于使用backref来确保分隔符匹配的编辑。那样的话,你无论如何都需要它们。最初我的意思是,你可以从([\/-]?)
中删除周围的()
,然后你将得到一个只包含(天、月、年)的数组,而不管是否存在分隔符。酷家伙!谢谢。我更喜欢带有\2的选项。它有一个副作用,我可以忍受…:-)数组现在总是有4个元素,其中第1、第3和第4个是数字,第2个是分隔符(-or/)或空字符串。