为了账号安全,请及时绑定邮箱和手机立即绑定

Javascript日期正则表达式DD / MM / YYYY

Javascript日期正则表达式DD / MM / YYYY

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”),它仍然会失败。


查看完整回答
反对 回复 2019-07-24
  • 3 回答
  • 0 关注
  • 1022 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信