用于测试日期格式的正则表达式
Regex for testing date formatting
我发现了一个非常有用的正则表达式,用于在正则表达式示例站点中测试日期字段的格式和内容
但是当我输入超过2000年的日期时,我得到了一个验证,因为这是一个输入出生日期的字段,所以你可以看到为什么这会是一个问题。我相信这是一个简单的修复,但正则表达式吓到我了。
$('#txtDOB').blur(function() {
//$('span.error-keyup-5').remove();
var inputVal = $(this).val();
var dateReg = /^[0,1]?'d{1}'/(([0-2]?'d{1})|([3][0,1]{1}))'/(([1]{1}[9]{1}[9]{1}'d{1})|([2-9]{1}'d{3}))$/;
if(!dateReg.test(inputVal)) {
alert('invalid date format: ' + inputVal);
}
我没有结婚,所以如果你能提出一个更好的方法,请评论走开。
与其测试字符串是否匹配一种或多种你认为可能是好日期的格式,我建议询问JavaScript是否它认为这是一个有效的日期:
function isValidDate(str){
return !isNaN(new Date(str));
}
这假定您将接受用户提供的各种格式中的任何一种(例如:比如可怕的美国MM/DD/YYYY或者更正常的ISO8601 YYYY-MM-DD)。如果你有一个特定的格式,你只会接受,然后解析你的字符串基于此,取出年/月/日期,然后问JavaScript这是否是一个有效的日期:
function isValidDate(year, month, date) {
var d = new Date(year*=1, month-=1, date*=1, 12); // noon to skip DST issues
return d.getFullYear()==year && d.getMonth()==month; // wrong date->wrong month
}
您需要检查年份/月份/日期是否全部匹配,因为new Date(2011,11,32)
被接受并解释为2012-1-1。
参见:Javascript方法确保日期是有效的
这里有很多混乱。首先,消除所有的{1}。这只意味着一个实例,这是完全多余的。此外,具有一个值的字符类与字符本身相同。因此,[1]变成了1。
那么,剩下的就是:
/^[01]?'d'/(([0-2]?'d)|([3][01]))'/((199'd)|([2-9]'d{3}))$/
这大概是MM/DD/YYYY。但YYYY只是199[0-9]和任何年份> 2000和<9999. 哇,那是一个日期范围!
作为基础,请尝试:
/^[01]?'d'/(([0-2]?'d)|([3][01]))'/([12]'d{3}))$/
给出的年份范围为1000 - 2999。但是正如上面Tim所说,如果您想要真正有效的日期,您应该使用特定的日期验证器。
如果你需要将日期字符串解析为日期,那么我会检查这个库:
- DateJS
相关文章:
- 使用正则表达式将输入格式设置为单字符逗号、单字符逗号等
- XXXXXX的正则表达式.XX格式的数字
- 正则表达式,用于从html格式的字符串中提取文本
- 什么将是日期格式的正则表达式'dd-M-y'
- Javascript 正则表达式日期格式 dd/mm/yy
- 正则表达式货币格式 - javascript
- 正则表达式仅用于数字,也屏蔽货币格式
- 用于数字格式的javascript正则表达式
- 用于日期格式验证的正则表达式
- 特定格式的正则表达式(javascript)
- 用于检查时间格式的 JavaScript 正则表达式
- JavaScript 中任何格式的日期正则表达式
- 使用正则表达式的JavaScript时间格式转换
- 自定义日期格式的正则表达式
- 什么是用于验证日期格式(如月/年)的正则表达式
- 包含美国运通卡号的 JavaScript 正则表达式格式字符串
- 在 JavaScript 中通过正则表达式将数字格式化为特定格式
- 12 小时时间格式的正则表达式
- jQuery 验证引擎:更改日期格式 dd-M-yy 的正则表达式
- 数据道场道具中正则表达式的格式是什么