Technical Forum
Ask questions. Discover Answers.
cancel
Showing results for 
Search instead for 
Did you mean: 
Custom Alert Banner

Parameter Value - Regular Expression

THE_BLUE
Cirrostratus
Cirrostratus

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}$

1 ACCEPTED SOLUTION

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)$)

View solution in original post

7 REPLIES 7

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.

0691T00000F6lUFQAZ.pngAnd shows it is not matching non-existing dates.0691T00000F6lUKQAZ.png 

KR

Daniel

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 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)$)

I have test my regex with 29/3/2026 but i got  Parameter value does not comply with regular expression , where it is works fine for 02/03/2022

 

THE_BLUE
Cirrostratus
Cirrostratus

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.