Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何组合正则表达式_Javascript_Regex - Fatal编程技术网

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/)或空字符串。