我需要使用正则表达式验证日期字符串的格式为dd/mm/yyyy
。
这个正则表达式可以验证dd/mm/yyyy
格式,但无法验证无效的日期,比如31/02/4500
:
^(0?[1-9]|[12][0-9]|3[01])[\/\-](0?[1-9]|1[012])[\/\-]\d{4}$
有哪些有效的正则表达式可以验证带闰年支持的dd/mm/yyyy
格式?
我需要使用正则表达式验证日期字符串的格式为dd/mm/yyyy
。
这个正则表达式可以验证dd/mm/yyyy
格式,但无法验证无效的日期,比如31/02/4500
:
^(0?[1-9]|[12][0-9]|3[01])[\/\-](0?[1-9]|1[012])[\/\-]\d{4}$
有哪些有效的正则表达式可以验证带闰年支持的dd/mm/yyyy
格式?
对于日期 MM/DD/YYYY,您可以使用
^((((0[13578])|([13578])|(1[02]))[\/](([1-9])|([0-2][0-9])|(3[01])))|(((0[469])|([469])|(11))[\/](([1-9])|([0-2][0-9])|(30)))|((2|02)[\/](([1-9])|([0-2][0-9]))))[\/]\d{4}$|^\d{4}$
它验证正确的日期和月份。
记住,您可以在
检查您的正则表达式,我推荐使用 :)
玩得开心!
^(((([13578]|0[13578]|1[02])[-](0[1-9]|[1-9]|1[0-9]|2[0-9]|3[01]))|(([469]|0[469]|11)[-]([1-9]|1[0-9]|2[0-9]|3[0]))|((2|02)([-](0[1-9]|1[0-9]|2[0-8]))))[-](19([6-9][0-9])|20([0-9][0-9])))|((02)[-](29)[-](19(6[048]|7[26]|8[048]|9[26])|20(0[048]|1[26]|2[048])))
这个正则表达式将验证以下日期格式:
12-30-2016(月-日-年)或 12-3-2016(月-日-年)或 1-3-2016(月-日-年)或 1-30-2016(月-日-年)
((((0[13578]|1[02])\/(0[1-9]|1[0-9]|2[0-9]|3[01]))|((0[469]|11)\/(0[1-9]|1[0-9]|2[0-9]|3[0]))|((02)(\/(0[1-9]|1[0-9]|2[0-8]))))\/(19([6-9][0-9])|20([0-9][0-9])))|((02)\/(29)\/(19(6[048]|7[26]|8[048]|9[26])|20(0[048]|1[26]|2[048])))
将使用MM/DD/YYYY
格式验证1960
至2028
年。
如果需要扩展闰年支持,请添加。
19(6[048]|7[26]|8[048]|9[26])|20(0[048]|1[26]|2[048]|3[26]|4[048])))
这也是有效的工作
^((((0[13578]|1[02])[/](0[1-9]|1[0-9]|2[0-9]|3[01]))|((0[469]|11)[/](0[1-9]|1[0-9]|2[0-9]|3[0]))|((02)([/](0[1-9]|1[0-9]|2[0-8]))))[/](19([6-9][0-9])|20([0-9][0-9])))|((02)[/](29)[/](19(6[048]|7[26]|8[048]|9[26])|20(0[048]|1[26]|2[048])))
如果你想更改日期格式为 mm-dd-yyyy
,那么请将 [/]
替换为 [-]
。同时可以在 http://regexr.com/ 上进行在线检查。
这是一个正则表达式,用于匹配不同分隔符的日期格式字符串YYYY-MM-DD
。它可以在句子中匹配字符串,并且可以匹配以st
、nd
和其他字符结尾的日期。
例如,它可以匹配以下句子中的日期:
"Her birthday is 2022 February 23rd; I will present here a gift."
"Her birthday is 2022 Feb 23rd; I will present here a gift."
"Her birthday is 2022 02 23; I will present here a gift."
这是日期正则表达式:
"\b
(?<YYYY>[0-9]{4})
(?<!0000)(?<sep>[ /.,-])
(?|
(?:(?<MM>0[13578]|1[02]|Jan(?:uary)?|Mar(?:ch)?|May|Jul(?:y)?|Aug(?:ust)?|Oct(?:ober)?|Dec(?:ember)?)\g{sep}(?<DD>0[1-9]|[12][0-9]|3[01]))|
(?:(?<MM>0[469]|11|Apr(?:il)?|Jun(?:e)?|Sep(?:tember)?|Nov(?:ember)?)\g{sep}(?<DD>0[1-9]|[12][0-9]|30))|
(?:(?<MM>02|Feb(?:ruary)?)\g{sep}(?<DD>0[1-9]|[12][0-9]))
)
(?:
(?<=[023][1])st|
(?<=[02][2])nd|
(?<=[02][3])rd|
(?<=(?:0[4-9])|(?:1[0-9])|20|(?:2[4-9])|30)th
)?
[,;.]?
\b"x
在我看来,使用正则表达式检查闰年没有意义,因为可以写一个简单、清晰且易懂的一行代码来实现:
is_leap_year(y) = ((y%4 == 0) && (y%100 != 0)) || (y%400 == 0)
正则表达式用于匹配字符串,而不是进行计算。最好的方法是匹配字符串,然后将捕获的MM
组传递给is_leap_year
函数,如果它是02
、Feb
或February
,以验证字符串。
我知道这个回答跟问题有些偏离,但如果问题的意图是“如何验证日期?”,那么为什么不让编程语言来完成所有艰巨的工作(如果你使用的是能够实现该功能的语言)呢?
例如,在PHP中:
$this_date_object = date_create($this_date);
if ($this_date_object == false )
{
// process the error
}
我知道这个问题已经有很长时间没有回答了,但也许这可以帮助其他人。我的意图是想检查年份,并让一些过去的年份也匹配。这个正则表达式匹配格式为"DD-MM-YYYY"的日期。因此,这个函数将返回一个正则表达式:
const check_year = "01-01-2021"
console.log(get_regex())
console.log(check_year.match(get_regex()))
function get_regex(){
let actual_year = `${new Date().getFullYear()}`
let regex = new RegExp()
let split_year = actual_year.split("")
let year_regex = `${split_year[0]}[0-${split_year[1]}][0-${split_year[2]}][0-${split_year[3]}]$`
let day_month_regex = "^([1-2][0-9]|3[0-1]|0?[1-9])[-]([1][0-2]|0?[1-9])[-]"
regex.compile(day_month_regex+year_regex, "g")
return regex
}
仅限当天使用:
<input placeholder="day" maxlength="2" minlength="1" formControlName="birthDay"
name="birthDay"pattern="(0[1-9]|1[0-9]|2[0-9]|3[0-1])" >/
仅限本月使用:
<input placeholder="month" maxlength="2" minlength="1"
formControlName="month" name="month" formControlName="month" name="month" pattern="(0[1-
9]|1[0-2])">/
/(0[1-9]|[12][0-9]|3[01])\-(0[1-9]|1[0,1,2])\-(19|20)\d{2}/
试一下这个正则表达式,它会工作 ---> 24-02-1992
pattern
属性中设置一个正则表达式即可。 - awe