471,337 Members | 1,122 Online
Bytes | Software Development & Data Engineering Community
Post +

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 471,337 software developers and data experts.

Please help with regular expression

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

Jul 23 '05 #1
6 1911
Ivo
<pa********@hotmail.com> wrote >
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
--
Ivo
http://4umi.com/web/regex/

Jul 23 '05 #2
JRS: In article <11**********************@f14g2000cwb.googlegroups .com>
, dated Tue, 12 Apr 2005 07:50:08, seen in news:comp.lang.javascript,
pa********@hotmail.com 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.

--
© John Stockton, Surrey, UK. ?@merlyn.demon.co.uk Turnpike v4.00 IE 4 ©
<URL:http://www.jibbering.com/faq/> JL/RC: FAQ of news:comp.lang.javascript
<URL:http://www.merlyn.demon.co.uk/js-index.htm> jscr maths, dates, sources.
<URL:http://www.merlyn.demon.co.uk/> TP/BP/Delphi/jscr/&c, FAQ items, links.
Jul 23 '05 #3
Hi Ivo,

Thanks for the response - its much appreciated. I got it to work.

Paul

Jul 23 '05 #4
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

Jul 23 '05 #5
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

Jul 23 '05 #6
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

Jul 23 '05 #7

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

4 posts views Thread by Neri | last post: by
4 posts views Thread by sasifiqbal | last post: by
17 posts views Thread by Mark | last post: by
4 posts views Thread by MooMaster | last post: by
1 post views Thread by NvrBst | last post: by
reply views Thread by rosydwin | last post: by

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.