Javascript日期正则表达式DD / MM / YYYY我知道有很多正则表达式的线程,我需要一个我无法在任何地方找到的特定模式此正则表达式以YYYY-MM-DD格式验证/^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])$/我需要模式为DD / MM / YYYY(第一天因为它是西班牙语而且只有“/”,“ - ”不应该被允许)我搜索了几个正则表达式库,我认为这个应该有效...但由于我不熟悉正则表达式,我不确定它是否有类似的验证(0[1-9]|[12][0-9]|3[01])[ \.-](0[1-9]|1[012])[ \.-](19|20|)\d\d我也不知道为了逃避斜线,我试图“看到”字符串中的逻辑,但这就像是为我“看”矩阵代码。我将正则表达式字符串放在选项.js中[...] },"date": {
"regex": (0[1-9]|[12][0-9]|3[01])[ \.-](0[1-9]|1[012])[ \.-](19|20|)\d\d,
"alertText": "Alert text AAAA-MM-DD"
},"other type..."[...]那么,如果正则表达式没问题,我该如何逃避呢?如果不是,那么正确的正则表达式是什么?我该如何逃避呢?:P非常感谢
3 回答
慕田峪9158850
TA贡献1794条经验 获得超7个赞
正则表达式适用于匹配常规格式,但我认为您应该将解析移动到Date类,例如:
function parseDate(str) { var m = str.match(/^(\d{1,2})\/(\d{1,2})\/(\d{4})$/); return (m) ? new Date(m[3], m[2]-1, m[1]) : null;}
现在您可以使用此功能检查有效日期; 但是,如果您需要实际验证而不进行滚动(例如“31/2/2010”不会自动滚动到“2010年3月3日”),那么您还有另一个问题。
[编辑]如果您还想在不滚动的情况下进行验证,则可以添加一个检查以与原始字符串进行比较,以确保它是相同的日期:
function parseDate(str) { var m = str.match(/^(\d{1,2})\/(\d{1,2})\/(\d{4})$/) , d = (m) ? new Date(m[3], m[2]-1, m[1]) : null , nonRolling = (d&&(str==[d.getDate(),d.getMonth()+1,d.getFullYear()].join('/'))); return (nonRolling) ? d : null;}
[Edit2]如果你想与零填充日期匹配(例如“08/08/2013”),你可以这样做:
function parseDate(str) { function pad(x){return (((''+x).length==2) ? '' : '0') + x; } var m = str.match(/^(\d{1,2})\/(\d{1,2})\/(\d{4})$/) , d = (m) ? new Date(m[3], m[2]-1, m[1]) : null , matchesPadded = (d&&(str==[pad(d.getDate()),pad(d.getMonth()+1),d.getFullYear()].join('/'))) , matchesNonPadded = (d&&(str==[d.getDate(),d.getMonth()+1,d.getFullYear()].join('/'))); return (matchesPadded || matchesNonPadded) ? d : null;}
但是,对于不一致的填充日期(例如“8/08/2013”),它仍然会失败。
添加回答
举报
0/150
提交
取消