Please help with regular expression

P

paulsmith5

Hi,

I have the following regular expression to validate a date-time field
in European or d/m/y h:m:s format.

^((((31\/(0?[13578]|1[02]))|((29|30)\/(0?[1,3-9]|1[0-2])))\/(1[6-9]|[2-9]\d)?\d{2})|(29\/0?2\/(((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]))\/((1[6-9]|[2-9]\d)?\d{2}))
(20|21|22|23|[0-1]?\d):[0-5]?\d:[0-5]?\d$

I wish to ammend it so that the time or h:m:s part is validated only if
supplied (i.e. I wish to make the time part optional). At present if a
time is not supplied the validation fails. I gather that the following
part of the above expression

(20|21|22|23|[0-1]?\d):[0-5]?\d:[0-5]?\d$

validates the time, however I don't know the syntax to make it
optional. I hope somebody can help.

Thanks,

Paul
 
I

Ivo

I have the following regular expression to validate a date-time field
in European or d/m/y h:m:s format.

^((((31\/(0?[13578]|1[02]))|((29|30)\/(0?[1,3-9]|1[0-2])))\/(1[6-9]|[2-9]\d)
?\d{2})|(29\/0?2\/(((1[6-9]|[2-9]\d)?(0[48]|[2468][048]|[13579][26])|((16|[2
468][048]|[3579][26])00))))|(0?[1-9]|1\d|2[0-8])\/((0?[1-9])|(1[0-2]))\/((1[
6-9]|[2-9]\d)?\d{2}))
(20|21|22|23|[0-1]?\d):[0-5]?\d:[0-5]?\d$

I wish to ammend it so that the time or h:m:s part is validated only if
supplied (i.e. I wish to make the time part optional). At present if a
time is not supplied the validation fails. I gather that the following
part of the above expression

(20|21|22|23|[0-1]?\d):[0-5]?\d:[0-5]?\d$

validates the time, however I don't know the syntax to make it
optional. I hope somebody can help.

Put brackets () around the part you quoted minus the dollar sign, and put a
question mark after the closing bracket. Like so:

((20|21|22|23|[0-1]?\d):[0-5]?\d:[0-5]?\d)?$

The brackets group the characters so the question mark applies to the whole
thing. The meaning of the question mark is exactly what you ask for: the
preceding bit is optional. The dollar sign matches the end of the string so
applies to the whole regex and should not be inside this group.

hth
 
D

Dr John Stockton

JRS: In article <[email protected]>
, dated Tue, 12 Apr 2005 07:50:08, seen in (e-mail address removed) posted :
I have the following regular expression to validate a date-time field
in European or d/m/y h:m:s format.

^((((31\/(0?[13578]|1[02]))|((29|30)\/(0?[1,3-9]|1[0-2])))\/(1[6-9]|[2-9]\d)?\d{
2})|(29\/0?2\/(((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]))\/((1[6-9]|[2-9]\d
)?\d{2}))
(20|21|22|23|[0-1]?\d):[0-5]?\d:[0-5]?\d$

I wish to ammend it so that the time or h:m:s part is validated only if
supplied (i.e. I wish to make the time part optional). At present if a
time is not supplied the validation fails. I gather that the following
part of the above expression

(20|21|22|23|[0-1]?\d):[0-5]?\d:[0-5]?\d$

validates the time, however I don't know the syntax to make it
optional. I hope somebody can help.

You *could* omit the final $ from the RegExp without *much* loss; then
you can append " 00:00:00" to the date or date/time to make it a
date/time or date/time/time, with only the first time being used


There are much more sensible approaches - well, at least one - to
validating date and/or time. Read the newsgroup FAQ (Mon, Fri, or WWW
edition), and see below, and read <URL:http://www.merlyn.demon.co.uk/js-
date4.htm>.



Of course, d/m/y is not really European; some use d-m-y, some d/m/y,
some d.m.y, some y-m-d.

If you can, however, use YYYY-MM-DD and hh:mm:ss, as per ISO 8601 -
note, any field numerically 0-9 needs a leading zero.


I suggest starting with split(" ") or maybe split(/[^0-9:-]+/) to
break date & time apart, check length to see if there should be a time,
and validate separately.

A significant part of the RegExp above is dealing with the 100 & 400
year Gregorian Rules. That seems unlikely to be needed at present,
since between 1900-03-01 and 2100-02-28 inclusive the Gregorian Calendar
gas the same dates as the Julian (13 days earlier); only the 4-year rule
is of current importance.
 
P

paulsmith5

Hi John,

Thanks for the reply. I know its not perfect but I got it to wok in the
end. Thanks for your help.

Paul
 
P

paulsmith5

Hi John,

Thanks for the reply. I know its not perfect but I got it to work in
the end. Thanks for your help.

Paul
 
P

paulsmith5

Hi John,

Thanks for the reply. I know its not perfect but I got it to work in
the end. Thanks for your help.

Paul
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Similar Threads

Code help please 4
Help please 8
HELP PLEASE 4
Help with my responsive home page 2
Minimum Total Difficulty 0
Code was not Working Please Help 1
Machine Learning.. Endless Struggle 3
Help with code 0

Members online

No members online now.

Forum statistics

Threads
473,995
Messages
2,570,226
Members
46,815
Latest member
treekmostly22

Latest Threads

Top