Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/377.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 正则表达式,有效日期时间(ddHHmmZ MMM yy)_Javascript_Jquery_Regex - Fatal编程技术网

Javascript 正则表达式,有效日期时间(ddHHmmZ MMM yy)

Javascript 正则表达式,有效日期时间(ddHHmmZ MMM yy),javascript,jquery,regex,Javascript,Jquery,Regex,我正在寻找以以下格式验证日期/时间格式的方法: ddHHmmZ-MMM-yy(示例:091603Z-Apr 14) 验证器必须只接受有效的日期时间 我有以下正则表达式: var militaryDateTime = /^\s*(\d{1,2})(\d{1,2})(\d{1,2})[zZ]{1}\s+([a-zA-Z]{3})\s+(\d{2})\s*$/; 以上仅验证datetime的字母/数字块是否位于正确位置。如何扩展此功能以检查有效的日期/时间?您可以使用第三方库来验证日期格

我正在寻找以以下格式验证日期/时间格式的方法:

  • ddHHmmZ-MMM-yy
    (示例:
    091603Z-Apr 14
验证器必须只接受有效的日期时间

我有以下正则表达式:

var militaryDateTime =
    /^\s*(\d{1,2})(\d{1,2})(\d{1,2})[zZ]{1}\s+([a-zA-Z]{3})\s+(\d{2})\s*$/;

以上仅验证datetime的字母/数字块是否位于正确位置。如何扩展此功能以检查有效的日期/时间?

您可以使用第三方库来验证日期格式,而不是制作复杂的正则表达式。我建议使用MomentJS

var format = "DDHHmm MMM YY";
var dates = [
    "091500 Jan 14", // Valid date
    "321500 Jan 14", // Invalid day
    "092500 Jan 14", // Invalid hour
    "091561 Jan 14", // Invalid minute
    "091500 LOL 14"  // Invalid month
];

for(var i in dates) {
    if(moment(dates[i], format).isValid()){
        alert("\"" + dates[i] + "\" is valid");
    } else {
        alert("\"" + dates[i] + "\" is not Valid");
    }
}

我也发布了一个实时演示来摆弄:

与其制作复杂的正则表达式,不如使用第三方库来验证日期格式。我建议使用MomentJS

var format = "DDHHmm MMM YY";
var dates = [
    "091500 Jan 14", // Valid date
    "321500 Jan 14", // Invalid day
    "092500 Jan 14", // Invalid hour
    "091561 Jan 14", // Invalid minute
    "091500 LOL 14"  // Invalid month
];

for(var i in dates) {
    if(moment(dates[i], format).isValid()){
        alert("\"" + dates[i] + "\" is valid");
    } else {
        alert("\"" + dates[i] + "\" is not Valid");
    }
}

我也发布了一个实时演示:使用正则表达式检查语义肯定不起作用,如果真的起作用,那肯定是代码维护者的地狱

datetime包含月份和年份的日期。这意味着您必须考虑闰年条件才能正确计算2月29日。因此,您应该重新考虑是否真的需要并希望使用regex来完成这项工作,因为模式将变得非常复杂,几乎无法维护

如果你真的想雇佣,你可以尝试以下方法作为开始(忽略2月29日):

当然,您必须将其包装成一行并删除空格,因为js正则表达式不支持人类可读的正则表达式词汇化

注意:
您知道吗,SO有一个门户页面,用于最常见的正则表达式相关问题?
.

使用正则表达式检查语义肯定不起作用,如果真的起作用,那肯定是代码维护者的地狱

datetime包含月份和年份的日期。这意味着您必须考虑闰年条件才能正确计算2月29日。因此,您应该重新考虑是否真的需要并希望使用regex来完成这项工作,因为模式将变得非常复杂,几乎无法维护

如果你真的想雇佣,你可以尝试以下方法作为开始(忽略2月29日):

当然,您必须将其包装成一行并删除空格,因为js正则表达式不支持人类可读的正则表达式词汇化

注意:
您知道吗,SO有一个门户页面,用于最常见的正则表达式相关问题?
.

在没有任何插件或库的情况下,最好的方法是首先通过正则表达式获取所有datetime组件,以测试输入字符串的格式是否正确:

var test_str = '091603Z Apr 14';
var date_matches = test_str.match(/^(\d{2})(\d{2})(\d{2})Z (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) (\d{2})$/);
// date_matches = ["091603Z Apr 14", "09", "16", "03", "Apr", "14"];
然后解析一个格式正确/编译正确的字符串,该字符串
Date.parse
可以正确解析:

var s = Date.parse(date_matches[4] + ' ' + date_matches[1] + ', ' + date_matches[5] + ' ' + date_matches[2] + ':' + date_matches[3]);
// s = 1397073780000;
为了确保我们使用了格式正确的字符串来解析日期:

var date = new Date(1397073780000);
// date = Wed Apr 09 2014 16:03:00 GMT-0400 (EDT)

如果原始字符串无效,则
Date.parse
将返回
NaN
,因此您可以简单地使用
isNaN()

进行测试,而无需任何插件或库,最好的方法是首先通过正则表达式获取所有日期时间组件,以测试输入字符串的格式是否正确:

var test_str = '091603Z Apr 14';
var date_matches = test_str.match(/^(\d{2})(\d{2})(\d{2})Z (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) (\d{2})$/);
// date_matches = ["091603Z Apr 14", "09", "16", "03", "Apr", "14"];
然后解析一个格式正确/编译正确的字符串,该字符串
Date.parse
可以正确解析:

var s = Date.parse(date_matches[4] + ' ' + date_matches[1] + ', ' + date_matches[5] + ' ' + date_matches[2] + ':' + date_matches[3]);
// s = 1397073780000;
为了确保我们使用了格式正确的字符串来解析日期:

var date = new Date(1397073780000);
// date = Wed Apr 09 2014 16:03:00 GMT-0400 (EDT)

如果原始字符串无效,则
Date.parse
将返回
NaN
,因此您可以简单地使用
isNaN()

进行测试,只需回答一个问题。。。您正在使用服务器端框架吗?最好是asp.net mvc:)我正在服务器上验证日期,因为在客户端执行此操作时存在很多错误。是的,我们正在使用asp.net mvc。我们的要求之一是验证客户端/服务器端。是否需要使用正则表达式进行验证?我建议使用并让它用指定的格式解析字符串。如果它返回一个有效的对象,则日期是有效的。如果表单上有该字段,则可以添加
[Remote]
属性,并生成
ActionResult
,在该属性中可以尝试类似
DateTime.TryParseExact(“091603Z Apr 14”,“ddHHmmZ MMM yy”,“CultureInfo.CurrentCulture,datetimestyle.None,out date)”的操作。
!我正在尝试[Remote]属性方法,因为datetime字段在表单上。只是一个问题。。。您正在使用服务器端框架吗?最好是asp.net mvc:)我正在服务器上验证日期,因为在客户端执行此操作时存在很多错误。是的,我们正在使用asp.net mvc。我们的要求之一是验证客户端/服务器端。是否需要使用正则表达式进行验证?我建议使用并让它用指定的格式解析字符串。如果它返回一个有效的对象,则日期是有效的。如果表单上有该字段,则可以添加
[Remote]
属性,并生成
ActionResult
,在该属性中可以尝试类似
DateTime.TryParseExact(“091603Z Apr 14”,“ddHHmmZ MMM yy”,“CultureInfo.CurrentCulture,datetimestyle.None,out date)”的操作。
!我正在尝试[Remote]属性方法,因为datetime字段位于表单上。