Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.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
Regex ColdFusion中dd-mmm-yy日期格式的正则表达式_Regex_Coldfusion_Coldfusion 9 - Fatal编程技术网

Regex ColdFusion中dd-mmm-yy日期格式的正则表达式

Regex ColdFusion中dd-mmm-yy日期格式的正则表达式,regex,coldfusion,coldfusion-9,Regex,Coldfusion,Coldfusion 9,我想确保用户上传的csv的日期格式为dd mmm yy 2014年2月10日。我做了研究,发现ColdFusion日期函数都不能帮助我解决这个问题 我可以将IsValid函数与正则表达式验证一起使用。我不擅长写正则表达式。感谢您的帮助。这里有一个快速示例,说明如何使用闰年支票来完成此操作 <cffunction name="isCorrectDateFormat" returntype="Boolean" output=false > <cfargument name=

我想确保用户上传的csv的日期格式为dd mmm yy 2014年2月10日。我做了研究,发现ColdFusion日期函数都不能帮助我解决这个问题


我可以将IsValid函数与正则表达式验证一起使用。我不擅长写正则表达式。感谢您的帮助。

这里有一个快速示例,说明如何使用闰年支票来完成此操作

<cffunction name="isCorrectDateFormat" returntype="Boolean" output=false >
    <cfargument name="Input" type="String" />
    <cfscript>
        var Months30 = "Jan|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec";
        var Months31 = "Jan|Mar|May|Jul|Aug|Oct|Dec";

        var DatePattern = "(?i)(?:[1-9]|[12][0-9])-(?:#Months30#|Feb)-\d\d|30-(?:#Months30#)-\d\d|31-(?:#Months31#)-\d\d";

        return Arguments.Input.matches(DatePattern)
            AND ( left(Input,6) EQ '29-Feb' IMP isLeapYear('20'&right(Arguments.Input,2)) )
            ;
    </cfscript>
</cffunction>

对于四位数的年份,每个年份的最后\d\d可以是\d\d\d\d或\d{4},也可以是?:19\d\d | 2[01]\d\d,具体取决于所涉及的具体日期范围。

下面是一个快速示例,说明如何使用闰年检查来完成此操作

<cffunction name="isCorrectDateFormat" returntype="Boolean" output=false >
    <cfargument name="Input" type="String" />
    <cfscript>
        var Months30 = "Jan|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec";
        var Months31 = "Jan|Mar|May|Jul|Aug|Oct|Dec";

        var DatePattern = "(?i)(?:[1-9]|[12][0-9])-(?:#Months30#|Feb)-\d\d|30-(?:#Months30#)-\d\d|31-(?:#Months31#)-\d\d";

        return Arguments.Input.matches(DatePattern)
            AND ( left(Input,6) EQ '29-Feb' IMP isLeapYear('20'&right(Arguments.Input,2)) )
            ;
    </cfscript>
</cffunction>

对于四位数的年份,每个年份的最终\d\d\d可以是\d\d\d\d或\d{4},也可以是?:19\d\d | 2[01]\d\d,具体取决于所涉及的具体日期范围。

根据Peter的评论,我已经修改了我的代码。。我使用了一个简单的正则表达式,然后在另一个验证中考虑了其余部分

<cfset mydate = "31-Apr-12" />
<cfset flag = isValid("regular_expression", Ucase(mydate), "^(([0-9])|([0-2][0-9])|([3][0-1]))\-(JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC)\-\d{2}$") />

<cfset aplhaMonths = "APR,JUN,SEP,NOV">
<cfif flag>
<cfif ListGetAt(mydate,1,"-") EQ 31 AND ListFindNocase(aplhaMonths, ListGetAt(mydate,2,"-")) >
<cfset flag = false />
<cfelseif ListGetAt(mydate,1,"-") GT 29 AND ListGetAt(mydate,2,"-") EQ "FEB">
<cfset flag = false />
<cfelseif ListGetAt(mydate,1,"-") EQ 29 AND ListGetAt(mydate,2,"-") EQ "FEB" AND NOT IsLeapYear(mydate)>
<cfset flag = false />
</cfif>
</cfif>

根据Peter的评论,我已经修改了我的代码。。我使用了一个简单的正则表达式,然后在另一个验证中考虑了其余部分

<cfset mydate = "31-Apr-12" />
<cfset flag = isValid("regular_expression", Ucase(mydate), "^(([0-9])|([0-2][0-9])|([3][0-1]))\-(JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC)\-\d{2}$") />

<cfset aplhaMonths = "APR,JUN,SEP,NOV">
<cfif flag>
<cfif ListGetAt(mydate,1,"-") EQ 31 AND ListFindNocase(aplhaMonths, ListGetAt(mydate,2,"-")) >
<cfset flag = false />
<cfelseif ListGetAt(mydate,1,"-") GT 29 AND ListGetAt(mydate,2,"-") EQ "FEB">
<cfset flag = false />
<cfelseif ListGetAt(mydate,1,"-") EQ 29 AND ListGetAt(mydate,2,"-") EQ "FEB" AND NOT IsLeapYear(mydate)>
<cfset flag = false />
</cfif>
</cfif>

如果您需要特定的日期格式,如YYYY-MM-DD或YYYY-MM-DD HH:MM:ss

不应允许2017-1-2 它也不应该允许9:9:9时间格式

f arguments.preparedInput.printFileLastModifiedMin neq或arguments.preparedInput.printFileLastModifiedMax neq{ local.validMinDateFlag=是; local.validMaxDateFlag=是

            if (arguments.preparedInput.printFileLastModifiedMin neq "")
                local.validMinDateFlag = isValid ("regex", arguments.preparedInput.printFileLastModifiedMin, "^\d\d\d\d-(0[1-9]|1[0-2])-([0][1-9]|[12][0-9]|3[01])$");

            if (arguments.preparedInput.printFileLastModifiedMax neq "")
                local.validMaxDateFlag = isValid ("regex",arguments.preparedInput.printFileLastModifiedMax, "^\d\d\d\d-(0[1-9]|1[0-2])-([0][1-9]|[12][0-9]|3[01])$");

            if (local.validMaxDateFlag eq "NO" or local.validMinDateFlag eq "NO"){
                if (local.validMinDateFlag eq "NO")
                    local.validMinDateFlag = isValid ("regex",arguments.preparedInput.printFileLastModifiedMin, "^\d\d\d\d-(0[1-9]|1[0-2])-([0][1-9]|[12][0-9]|3[01]) (00|[0][0-9]|1[0-9]|2[0-3]):([0][0-9]|[0-5][0-9]):([0][0-9]|[0-5][0-9])$");

                if (local.validMaxDateFlag eq "NO")
                    local.validMaxDateFlag = isValid ("regex",arguments.preparedInput.printFileLastModifiedMax, "^\d\d\d\d-(0[1-9]|1[0-2])-([0][1-9]|[12][0-9]|3[01]) (00|[0][0-9]|1[0-9]|2[0-3]):([0][0-9]|[0-5][0-9]):([0][0-9]|[0-5][0-9])$");
            }

如果您需要特定的日期格式,如YYYY-MM-DD或YYYY-MM-DD HH:MM:ss

不应允许2017-1-2 它也不应该允许9:9:9时间格式

f arguments.preparedInput.printFileLastModifiedMin neq或arguments.preparedInput.printFileLastModifiedMax neq{ local.validMinDateFlag=是; local.validMaxDateFlag=是

            if (arguments.preparedInput.printFileLastModifiedMin neq "")
                local.validMinDateFlag = isValid ("regex", arguments.preparedInput.printFileLastModifiedMin, "^\d\d\d\d-(0[1-9]|1[0-2])-([0][1-9]|[12][0-9]|3[01])$");

            if (arguments.preparedInput.printFileLastModifiedMax neq "")
                local.validMaxDateFlag = isValid ("regex",arguments.preparedInput.printFileLastModifiedMax, "^\d\d\d\d-(0[1-9]|1[0-2])-([0][1-9]|[12][0-9]|3[01])$");

            if (local.validMaxDateFlag eq "NO" or local.validMinDateFlag eq "NO"){
                if (local.validMinDateFlag eq "NO")
                    local.validMinDateFlag = isValid ("regex",arguments.preparedInput.printFileLastModifiedMin, "^\d\d\d\d-(0[1-9]|1[0-2])-([0][1-9]|[12][0-9]|3[01]) (00|[0][0-9]|1[0-9]|2[0-3]):([0][0-9]|[0-5][0-9]):([0][0-9]|[0-5][0-9])$");

                if (local.validMaxDateFlag eq "NO")
                    local.validMaxDateFlag = isValid ("regex",arguments.preparedInput.printFileLastModifiedMax, "^\d\d\d\d-(0[1-9]|1[0-2])-([0][1-9]|[12][0-9]|3[01]) (00|[0][0-9]|1[0-9]|2[0-3]):([0][0-9]|[0-5][0-9]):([0][0-9]|[0-5][0-9])$");
            }
使用正则表达式 日期=^\d\d\d-0[1-9]| 1[0-2]-[0][1-9]|[12][0-9]|[3[01]$ 日期时间=^\d\d\d-0[1-9]| 1[0-2]-[0][1-9]|[12][0-9]|[3[01]00|[0][0-9]|[0-9]|[0-3]:[0][0-9]|[0-5][0-9]:[0][0-9]:[0][0-9]|[0-5][0-9]$

它将严格遵循yy-mm-dd,不允许yy-mm-dd或YYYY-m-dd或dd-mm-YYYY。 它将不允许h:m:sor h:mm:s或hh:mm:s它将只允许YYYY-mm-DD hh:mm:ss使用正则表达式 日期=^\d\d\d-0[1-9]| 1[0-2]-[0][1-9]|[12][0-9]|[3[01]$ 日期时间=^\d\d\d-0[1-9]| 1[0-2]-[0][1-9]|[12][0-9]|[3[01]00|[0][0-9]|[0-9]|[0-3]:[0][0-9]|[0-5][0-9]:[0][0-9]:[0][0-9]|[0-5][0-9]$

它将严格遵循yy-mm-dd,不允许yy-mm-dd或YYYY-m-dd或dd-mm-YYYY。
它将不允许h:m:sor h:mm:s或hh:mm:s它将只允许YYYY-mm-DD hh:mm:ss

您考虑过使用搜索引擎吗?感谢您的及时回复Peter。我不知道我们可以使用javaScript模式来实现IsValid。我明白了:IsValid函数并不专门采用JS模式,但大部分regex是sam对于大多数引擎和JS来说,e是相对有限的,所以它们通常可以工作。这声称是PCRE/Perl5兼容的,但实际上并不完全相同。哦,如果你需要一个正则表达式功能,而CF的函数不支持,Java的函数可能支持它。这相当于使用Java正则表达式引擎的isValid'regex',string,pattern我可以使用string.matchespattern:现在问题是2012年2月31日作为有效日期返回。你考虑过使用搜索引擎吗?谢谢你的及时回复Peter。我不知道我们可以使用javaScript模式来实现IsValid。我知道了:IsValid函数并没有特别采用JS模式,但是大部分的正则表达式对于大多数引擎都是一样的,JS相对有限,所以它们通常可以工作。它声称是PCRE/Perl5兼容的,但实际上并不完全相同。哦,如果你需要一个正则表达式功能,而CF的函数不支持,Java的函数可能支持它。相当于有效的'regex',string,pa使用Java的正则表达式引擎将使用string.MatchesPattern我可以这样做:现在问题是2012年2月31日作为有效日期返回。您在正则表达式中的参数有点过火,第一位可以从[0-9]|[0-2][0-9]|[3][0-1]简化为[1-9]|[12][0-9]|3[01]。这也避免了0和00的匹配。另外,值得注意的是捕获组..和非捕获组之间的区别?:..-不应该在这里应用,但不必要地使用捕获组可能会降低速度并浪费内存。您在正则表达式中的参数有些过火,第一位可以从[0-9]|[0-2][0-9]|[3][0-1]到[1-9][12][0-9]|[3[01]。这也避免了0和00的匹配。另外,值得注意的是捕获组和非捕获组之间的区别:…-不应该在这里应用,但不必要地使用捕获组可能会降低速度并浪费内存。