如何组合正则表达式

时间:2014-02-18 14:04:49

标签: 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) {
        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个元素的数组:day(1或2位数),第一个分隔符( - 或/),月份(1或2位数),第二个分隔符( - 或/可以是与第一个分隔符不同)和年份(2位数)。

第二个.match(regex)返回一个包含3个元素的数组:day(2位),month(2位)和year(2位)。

我试图将这两者与这个正则表达式合并:

/^(\d{1,2})(\/|-)(\d{1,2})(\/|-)(\d{2})$|^(\d{2})(\d{2})(\d{2})$/

验证有效,但my_date成为8个单元格的数组,其中前5个或后3个将不确定,具体取决于正则表达式的哪个部分与模式匹配。

有没有办法合并这两个部分,只返回一个包含5个或3个单元格的数组,具体取决于匹配的部分?

这是一个fiddle,用于测试多种日期格式以及合并和拆分的正则表达式。

1 个答案:

答案 0 :(得分:3)

这个正则表达式应该做你想要的:

/^(\d{1,2})([\/-]?)(\d{1,2})\2(\d{2})$/

日,月,年分别在捕获第1,3,4组。

我使用反向引用 \2 来确保第二个分隔符(年份和月份之间)与捕获组 2 中捕获的第一个分隔符相同([\/-]?)。因此,它与您的代码略有不同:它不接受带有混合分隔符的输入,例如12/3-01