Regex to validate date format dd/mm/yyyy

后端 未结 21 2303
挽巷
挽巷 2020-11-21 06:32

I need to validate a date string for the format dd/mm/yyyy with a regular expresssion.

This regex validates dd/mm/yyyy, but not the invalid

相关标签:
21条回答
  • 2020-11-21 07:24
    import re
    expression = "Nov 05 20:10:09 2020"
    reg_ex = r'((Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) ([0-2][0-9]|(3)[0-1]) (([0-1][0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])) (\d{4}))'
    assert re.fullmatch(reg_ex, expression), True
    

    Expaination with respect to given Example

    • Nov = A group of possible months i.e. (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)
    • 05 = A group of valid days i.e. ([0-2][0-9]|(3)[0-1])
    • 20:10:09 = A group for getting valid Hours : ([0-1][0-9]|2[0-3]), Minutes : ([0-5][0-9]) and Seconds : ([0-5][0-9])
    • 2020 = A group for getting year i.e (\d{4}))
    0 讨论(0)
  • 2020-11-21 07:25

    try this.

    ^(0[1-9]|[12][0-9]|3[01])[- /.](0[1-9]|1[012])[- /.](19|20)\d\d$
    

    you can test regular expression at http://www.regular-expressions.info/javascriptexample.html easily.

    0 讨论(0)
  • 2020-11-21 07:26

    The regex you pasted does not validate leap years correctly, but there is one that does in the same post. I modified it to take dd/mm/yyyy, dd-mm-yyyy or dd.mm.yyyy.

    ^(?:(?:31(\/|-|\.)(?:0?[13578]|1[02]))\1|(?:(?:29|30)(\/|-|\.)(?:0?[13-9]|1[0-2])\2))(?:(?:1[6-9]|[2-9]\d)?\d{2})$|^(?:29(\/|-|\.)0?2\3(?:(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))$|^(?:0?[1-9]|1\d|2[0-8])(\/|-|\.)(?:(?:0?[1-9])|(?:1[0-2]))\4(?:(?:1[6-9]|[2-9]\d)?\d{2})$

    I tested it a bit in the link Arun provided in his answer and also here and it seems to work.

    Edit February 14th 2019: I've removed a comma that was in the regex which allowed dates like 29-0,-11

    0 讨论(0)
提交回复
热议问题