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

Regex 键入时验证日期yyyy-mm-dd的正则表达式(在键盘上),regex,Regex,我需要在用户密钥上验证日期yyy-mm-dd 我目前正在用这个正则表达式验证yyyy-mm ^\d{0,4}$|^\d{4}[-]$|^\d{4}[-](0?[0-9]|1[012])$ 但我需要和其他人约会。有人能帮我吗?这个正则表达式有点复杂,但请检查整个格里高利规则 var regExp = /^(\d{4})-(\d{2})-(\d{2})$/ regExp.test(value); regExp = "(((\d{2}(([13579][26])|([2468][480])|

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

我目前正在用这个正则表达式验证yyyy-mm

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


但我需要和其他人约会。有人能帮我吗?

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

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

regExp.test(value);
 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]))))"

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

 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]))))"

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

^\d{0,4}$|^\d{4}-0?$|^\d{4}-(?:0?[1-9]|1[012])(?:-(?:0?[1-9]?|[12]\d|3[01])?)?$
  • (?:
    打开一个用于替换的
  • 0?[1-9]?
    可选1-9,前面加0或0
  • [12]\d
    第10-29天
  • 3[01]
    30天和31天

只要在打字时打个空头支票,你就可以把它缩短

它实际上并不验证日期(闰年/28-31天)。要在键入/提交时验证完整日期,并重新排列以匹配
YYYY-MM-DD

函数isValidDate(日期)
{
var matches=/^(\d{4})-(\d{1,2})-(\d{1,2})$/.exec(日期);
如果(matches==null)返回false;
变量y=匹配项[1];
var m=匹配[2]-1;
var d=匹配项[3];
var composedDate=新日期(y、m、d);
返回composedDate.getDate()==d&&
composedDate.getMonth()==m&&
composedDate.getFullYear()==y;
}


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

^\d{0,4}$|^\d{4}-0?$|^\d{4}-(?:0?[1-9]|1[012])(?:-(?:0?[1-9]?|[12]\d|3[01])?)?$
  • (?:
    打开一个用于替换的
  • 0?[1-9]?
    可选1-9,前面加0或0
  • [12]\d
    第10-29天
  • 3[01]
    30天和31天

只要在打字时打个空头支票,你就可以把它缩短

它实际上并不验证日期(闰年/28-31天)。要在键入/提交时验证完整日期,并重新排列以匹配
YYYY-MM-DD

函数isValidDate(日期)
{
var matches=/^(\d{4})-(\d{1,2})-(\d{1,2})$/.exec(日期);
如果(matches==null)返回false;
变量y=匹配项[1];
var m=匹配[2]-1;
var d=匹配项[3];
var composedDate=新日期(y、m、d);
返回composedDate.getDate()==d&&
composedDate.getMonth()==m&&
composedDate.getFullYear()==y;
}



检查日期
你能显示一个日期并澄清你到底不明白的是什么吗?@Steve你完全可以列举有效日期,以确保月份在01到12之间,甚至确保月份的日期在预期范围内……即使是闰年,如果你喜欢打字。试试。你想在正确键入时验证吗?@Steve Possib@Steve My regex的复制不是为了验证完整日期,而是为了检查输入的字符是否与yyyy-mm-dd模式匹配(问题是什么)。更新了我的答案以使其更清楚:)你能出示a并澄清你到底不明白的是什么吗?@Steve你完全可以列举有效日期,以确保月份在01和12之间,甚至确保月份的日期在预期范围内……即使是闰年,如果你喜欢键入。试试。你想在键入时验证吗?@Steve可能是@S的重复我的正则表达式不是验证完整日期,而是检查输入的字符是否与yyyy-mm-dd模式匹配(问题是什么)。更新了我的答案以使其更清楚:)我有相同的想法,但问题中的示例也验证了部分可用性。我需要验证月份和日期。根据您的建议,我不能。您的正则表达式将匹配
0002-67-99
。添加此正则表达式如何回答问题的解释将改进您对未来访问者的回答。我有相同的想法,但问题中的示例也验证了部分可用性。我需要验证月份和日期。根据您的建议,我不能。您的正则表达式将匹配
0002-67-99
。添加此正则表达式如何回答问题的解释将改进您对未来访问者的回答。您的解决方案验证完整日期,我需要验证用户键入的日期。请参阅我在帖子中添加的链接。@Ahsanul Haque,这是检查了整个格里高利法则,还是只检查了朱利安法则?即使是后者也令人印象深刻;人们希望错误地批准每四个世纪三天是可以的。(这个问题的另一个复杂之处是,格里高利规则不应该在1582年之前的日期使用,但这在大多数情况下都不值得费心。)@Steve,是的,它确实检查了整个格里高利规则。@Ahsanul Haque,哇,真令人印象深刻。表达式的复杂性使得如果不在纸上画出图表(或询问),就很难说出它。这表明正则表达式对于工作来说是错误的工具,除非这个问题是作为正则表达式挑战提出的,而不是任务的最佳工具的问题。(任务的工具是将输入传递给日期解析函数,正如@tripleee注释中的链接所建议的那样。)您的解决方案验证完整日期,我需要验证用户输入的日期。请参阅我在帖子中添加的链接。@Ahsanul Haque,这是检查了整个格里高利法则,还是只检查了朱利安法则?即使是后者也令人印象深刻;人们希望错误地批准每四个世纪三天是可以的。(这个问题的另一个复杂之处是,格里高利规则不应该在1582年之前的日期使用,但这在大多数情况下都不值得费心。)@Steve,是的,它确实检查了整个格里高利规则。@Ahsanul Haque,哇,真令人印象深刻。表达式的复杂性使得如果不在纸上画出图表(或询问),就很难说出它。这表明正则表达式对于工作来说是错误的工具,除非这个问题是作为正则表达式挑战提出的,而不是任务的最佳工具的问题。(任务的工具是将输入传递给日期解析函数,正如@tripleee注释中的链接所建议的那样。)
201