Reputation: 45
Currently below regex is working fine with dates but I want it to accept those date and month also which has single digit. How can I do that?
Regex should accept below formats also:
'11/4/2021' or '1/4/2021' or '1/04/2021'
dateString = '11/04/2021'
let dateformat = /^(((0[1-9]|[12]\d|3[01])\/(0[13578]|1[02])\/((19|[2-9]\d)\d{2}))|((0[1-9]|[12]\d|30)\/(0[13456789]|1[012])\/((19|[2-9]\d)\d{2}))|((0[1-9]|1\d|2[0-8])\/02\/((19|[2-9]\d)\d{2}))|(29\/02\/((1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|(([1][26]|[2468][048]|[3579][26])00))))$/g;
if(dateString.match(dateformat)){
let operator = dateString.split('/');
console.log(operator)
}
Upvotes: 0
Views: 518
Reputation: 13
For month: ^0{1}[1-9]$|^[1-9]{1}$|^1[012]{1}$
The first part is with 0, the second part is without 0, and the last one is for 10, 11 and 12.
For days: ^0{1}[1-9]{1}$|^[1-9]{1}$|^[12]{1}[0-9]{1}$|^3[01]{1}$
The first one is for days with from 1-9 starting with 0 and the second one is for the same but without the 0.
About the if the max day is 31, 30 or 28 I would use javascript for that.
Upvotes: 1
Reputation: 730
You are able to achieve the requested by adding to the 8th group an OR statement with the 1 to 9 characters. That's for the days. The same goes for the months.
Let me give you an example. Your matching group for the days right now is looking like this:
(0[1-9]|[12]\d|30)
Which means that you accept all numbers which start with 0 and a digit from 1 to 9 afterwards, a number starting with either 1 or 2 and any digit afterwards, or 30.
In order to accept the digits from 1 to 9 you have to add another condition to your matching group and that is the 1 to 9 digits. So your group will look something like the following:
(0[1-9]|[12]\d|30|[1-9])
This is the most basic thing you can do. There are plenty of ways to optimize this regex and do it in a better way. You can think about the 31st day of the month, since right now it is not capturing it.
The same way I shown in the example for the days' matching group, you can do it for the months' matching group.
Upvotes: 0