正则表达式在键入时验证日期yyyy-mm-dd(在键盘上)

时间:2016-03-15 11:03:09

标签: regex

我需要在用户密钥上验证日期 yyyy-mm-dd

我目前正在使用此正则表达式验证 yyyy-mm

^\d{0,4}$|^\d{4}[-]$|^\d{4}[-](0?[0-9]|1[012])$

JS Fiddle

但我需要验证其他部分日期。任何人都可以帮助我吗?

3 个答案:

答案 0 :(得分:2)

这个正则表达式有点复杂,但检查整个格里高利规则。

 regExp = "(((\d{2}(([13579][26])|([2468][480])|(0[48])))|(([13579][26])|([02468][480]))00)-02-29)|(\d{4}-((?:(0[13578]|1[02])-([0-2]\d|3[0-1]))|(?:(0[469]|11)-([0-2]\d|30))|(?:02-([0-1]\d|2[0-8]))))"

答案 1 :(得分:1)

稍微修改了当前的正则表达式并添加了dd部分,使其成为

^\d{0,4}$|^\d{4}-0?$|^\d{4}-(?:0?[1-9]|1[012])(?:-(?:0?[1-9]?|[12]\d|3[01])?)?$
  • (?:打开non capture group以进行更改
  • 0?[1-9]?可选1-9,前面有0或零
  • [12]\d天10-29
  • 3[01]第30天和第31天

See the demo at regex101

enter image description here

打字时只是松散的检查,你可以缩短它。

它并没有真正验证日期(闰年/ 28-31天)。在键入/提交see this answer of @PhiLho时验证完整日期并重新排列以匹配YYYY-MM-DD



function isValidDate(date)
{
    var matches = /^(\d{4})-(\d{1,2})-(\d{1,2})$/.exec(date);
    if (matches == null) return false;
    var y = matches[1];
    var m = matches[2] - 1;
    var d = matches[3];
    var composedDate = new Date(y, m, d);
    return composedDate.getDate() == d &&
            composedDate.getMonth() == m &&
            composedDate.getFullYear() == y;
}

<input type="text" id="test" value="2016-03-16">
<button onclick="alert(
  isValidDate(getElementById('test').value)
);">check date</button> 
&#13;
&#13;
&#13;

答案 2 :(得分:0)

var regExp = /^(\d{4})-(\d{2})-(\d{2})$/

regExp.test(value);