Forum Discussion

THE_BLUE's avatar
THE_BLUE
Icon for Cirrostratus rankCirrostratus
Nov 04, 2021

Parameter Value - Regular Expression

I want to restrict parameter value to accept date only, is below Regular Expression will work?

^([0-2][0-9]|(3)[0-1])(\/)(((0)[0-9])|((1)[0-2]))(\/)\d{4}$

  • I found this regex, fits in the 254 character limit and checks:

    1. valid dates
    2. if leap year, then 29.2. is also valid
    (^(((0[1-9]|1[0-9]|2[0-8])[\/](0[1-9]|1[012]))|((29|30|31)[\/](0[13578]|1[02]))|((29|30)[\/](0[4,6,9]|11)))[\/](19|[2-9][0-9])\d\d$)|(^29[\/]02[\/](19|[2-9][0-9])(00|04|08|12|16|20|24|28|32|36|40|44|48|52|56|60|64|68|72|76|80|84|88|92|96)$)
  • Yes, it will work, but will not catch non-existing dates like: 31/02/2000.

    I found a regex build by someone brilliant on stackoverflow, which also check for leap years.

    ^(?:(?: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})$

    Link to stackoverflow

    There is a regex validator in ASM, where it seems that the above regex is working.

    And shows it is not matching non-existing dates. 

    KR

    Daniel

    • THE_BLUE's avatar
      THE_BLUE
      Icon for Cirrostratus rankCirrostratus

      dear Daniel,

      the idea is, i want to accept date format only (dd/mm/yyyy) in this parameter and block others value like text and so on. so do i have to use the mentioned regex (your regex) ?

      one more thing, i can not use the above regex because it exceed the limit . how can i re-write the regex to accept dd/mm/yyyy ?

      • Hi ,

         

        You are correct, my regex is exceeding the 254 character limit. I tested it only in the regex validator, but not in a Parameter. My bad. *facepalm*

        Your regex should work, but it will not prevent users from adding dates like 31/02/2022. 

         

        KR

        Daniel

  • i have modified the regex to ^([0-2][0-9]|(3)[0-1])(\/)(([0-9]|(0)[0-9])|((1)[0-2]))(\/)\d{4}$ , now it can accept both 29/3/2026 and 02/03/2022 but again can't detect non-existing date ex 31/2/2021

    • I cannot judge which regex meets your requirements best. The usual syntax is dd/mm/yyyy.

      Is it more important for you, to have a syntax that would catch dd/mm/yyyy and dd/m/yyyy?

      Or is it it more important to filter out non-existing dates like 31/02/2022 and stick to the defacto standard of dd/mm/yyyy?

       

      My regex foo is not strong enough to combine both requirements into one single regex.