Re: [PHP] regexp novice

2012-05-20 Thread Geoff Shang

Stuart Dallas stu...@3ft9.com wrote:


On 18 May 2012, at 14:50, Jim Giner wrote:


Daft is a little harsh.  :)  00:40 is just not a time value that is
generally accepted.



It may appear harsh, but as far as I'm concerned it is daft to make
assumptions like that. You've essentially disallowed 12:nn am, but allowed
1:nn am, 2:nn am, 3:nn am, etc, because you're not validating the data in a
non-ambiguous way. I have no idea what you're developing, but you're making
a big assumption about the data that you're getting, which may appear
reasonable to you, but to me it's daft. Nothing personal, just my opinion,
which is all I have to offer.


Unless I've missed something, he hasn't disallowed 12:nn am, only 00:nn. 
If you're going to only accept 12-hour input, this is the right thing to 
do.  00:nn is not a valid 12-hour representation - only times from 1:nn to 
12:nn are acceptable.  If you were to accept 00:nn, you'd have to also 
accept 13:nn-23:nn as well, for consistancy.


Granted, not specifying am or pm adds a layer of ambiguity, but maybe 
that's not relevant for this query.  For example, maybe there's also a 
select field that has am and pm as options.


As it appears that accepting only 12-hour input is part of the brief, Jim 
is IMHO doing the right thing.


Geoff.


--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php



Re: [PHP] regexp novice

2012-05-18 Thread Jim Giner

Jim Lucas li...@cmsws.com wrote in message 
news:4fb5decc.20...@cmsws.com...
 On 5/17/2012 9:52 PM, Jim Lucas wrote:

 How about this instead?

 pre?php

 $times = array(
 '100', # valid
 '1100', # valid
 '1300', # invalid
 '01:00', # valid
 '12:59', # valid
 '00:01', # valid
 '00:25pm', # invalid
 '', # valid
 'a00', # invalid
 '00', # invalid
 );

 foreach ( $times AS $time )
 echo {$time} is .(valid_date($time)?'valid':'invalid').\n;

 function valid_date($time) {

 if ( ( $c_time = preg_replace('|[^\d\:]+|', '', $time) ) != $time )
 return false;

 preg_match('#^(?Phour\d{1,2}):?(?Pminute\d{2})$#', $time, $m);

 if (
 $m 
 ( 0 = (int) $m['hour']  12 = (int) $m['hour'] ) 
 ( 0 = (int) $m['minute']  59 = (int) $m['minute'] )
 ) {
 return TRUE;
 }

 return false;

 }

 Let me know.


 I optimized it a little...

 http://www.cmsws.com/examples/php/testscripts/shiplu@gmail.com/pt_regex.php
 http://www.cmsws.com/examples/php/testscripts/shiplu@gmail.com/pt_regex.phps

 pre?php

 $times = array(
   '100',  # valid
   '1100', # valid
   '1300', # invalid
   '01:00',# valid
   '12:59',# valid
   '00:01',# valid
   '00:25pm',  # invalid
   '', # valid
   'a00',  # invalid
   '00',   # invalid
   );

 foreach ( $times AS $time )
   echo {$time} is .(valid_time($time)?'valid':'invalid').\n;

 function valid_time($time) {
   if (
   preg_match('#^(\d{1,2}):?(\d{2})$#', $time, $m) 
   ( 0 = (int) $m[1]  12 = (int) $m[1] ) 
   ( 0 = (int) $m[2]  59 = (int) $m[2] )
  ) {
 return TRUE;
   }
   return FALSE;
 }


I'll have to study your regexp - a lot of stuff I don't understand yet in 
play there.  Thanks for the sample! 



-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php



Re: [PHP] regexp novice

2012-05-18 Thread Jim Giner

Jim Lucas li...@cmsws.com wrote in message 
news:4fb5decc.20...@cmsws.com...
 On 5/17/2012 9:52 PM, Jim Lucas wrote:

 How about this instead?

 pre?php

 $times = array(
 '100', # valid
 '1100', # valid
 '1300', # invalid
 '01:00', # valid
 '12:59', # valid
 '00:01', # valid
 '00:25pm', # invalid
 '', # valid
 'a00', # invalid
 '00', # invalid
 );

 foreach ( $times AS $time )
 echo {$time} is .(valid_date($time)?'valid':'invalid').\n;

 function valid_date($time) {

 if ( ( $c_time = preg_replace('|[^\d\:]+|', '', $time) ) != $time )
 return false;

 preg_match('#^(?Phour\d{1,2}):?(?Pminute\d{2})$#', $time, $m);

 if (
 $m 
 ( 0 = (int) $m['hour']  12 = (int) $m['hour'] ) 
 ( 0 = (int) $m['minute']  59 = (int) $m['minute'] )
 ) {
 return TRUE;
 }

 return false;

 }

 Let me know.


 I optimized it a little...

 http://www.cmsws.com/examples/php/testscripts/shiplu@gmail.com/pt_regex.php
 http://www.cmsws.com/examples/php/testscripts/shiplu@gmail.com/pt_regex.phps

 pre?php

 $times = array(
   '100',  # valid
   '1100', # valid
   '1300', # invalid
   '01:00',# valid
   '12:59',# valid
   '00:01',# valid
   '00:25pm',  # invalid
   '', # valid
   'a00',  # invalid
   '00',   # invalid
   );

 foreach ( $times AS $time )
   echo {$time} is .(valid_time($time)?'valid':'invalid').\n;

 function valid_time($time) {
   if (
   preg_match('#^(\d{1,2}):?(\d{2})$#', $time, $m) 
   ( 0 = (int) $m[1]  12 = (int) $m[1] ) 
   ( 0 = (int) $m[2]  59 = (int) $m[2] )
  ) {
 return TRUE;
   }
   return FALSE;
 }


OK - I don't yet understand how this works, but it seems to work for almost 
all cases.  The one erroneous result I get is from a value of 0040 (which I 
convert to 00:40 before hitting the regexp).  It comes thru as Ok.  If you 
have a fix for that I'd appreciate it - otherwise I'll have to devote some 
book-time to mastering this string and come up with a fix myself.

Thanks again!! 



-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php



Re: [PHP] regexp novice

2012-05-18 Thread Stuart Dallas
On 18 May 2012, at 14:32, Jim Giner wrote:

 OK - I don't yet understand how this works, but it seems to work for almost 
 all cases.  The one erroneous result I get is from a value of 0040 (which I 
 convert to 00:40 before hitting the regexp).  It comes thru as Ok.  If you 
 have a fix for that I'd appreciate it - otherwise I'll have to devote some 
 book-time to mastering this string and come up with a fix myself.

Based on your requirements, 00:40 is completely valid. Why do you think it 
should be invalid?

-- 
Stuart Dallas
3ft9 Ltd
http://3ft9.com/

Re: [PHP] regexp novice

2012-05-18 Thread shiplu
On Fri, May 18, 2012 at 7:34 PM, Stuart Dallas stu...@3ft9.com wrote:

 Based on your requirements, 00:40 is completely valid. Why do you think it
 should be invalid?


00:40 is not a valid 12-hour format.

BTW I just found another non-regex approach. Its even faster.

function valid_time_Shiplu2($time) {
sscanf($time, %2d%2d, $h, $m);
return ($h0  $h13  $m=0  $m60);
}

-- 
Shiplu.Mokadd.im
ImgSign.com | A dynamic signature machine
Innovation distinguishes between follower and leader


Re: [PHP] regexp novice

2012-05-18 Thread Jim Giner

Stuart Dallas stu...@3ft9.com wrote in message 
news:cc22e241-c1df-48e9-bf06-8a638a356...@3ft9.com...
On 18 May 2012, at 14:32, Jim Giner wrote:

 OK - I don't yet understand how this works, but it seems to work for 
 almost
 all cases.  The one erroneous result I get is from a value of 0040 (which 
 I
 convert to 00:40 before hitting the regexp).  It comes thru as Ok.  If you
 have a fix for that I'd appreciate it - otherwise I'll have to devote some
 book-time to mastering this string and come up with a fix myself.

Based on your requirements, 00:40 is completely valid. Why do you think it 
should be invalid?

-- 
Stuart Dallas
3ft9 Ltd
http://3ft9.com/

Don't know how you write the time, but I've never used a time of 00:40. 
Yes, I realize that my shorthand time string is missing a key ingredient of 
am/pm, but 12:40 would be the time in my mind regardless of the status of 
the sun.  In my speccific use of this code, all times would be 'daylight' 
times so 40 minutes after minute would be a) not practical and b) still not 
a recognized time in a 12-hour format.  Yes - in 24-hour formats, 00:40 is 
correct, but my initial post did reference my need of a 12-hour format 
solution. 



-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php



Re: [PHP] regexp novice

2012-05-18 Thread Stuart Dallas
On 18 May 2012, at 14:41, Jim Giner wrote:

 Stuart Dallas stu...@3ft9.com wrote in message 
 news:cc22e241-c1df-48e9-bf06-8a638a356...@3ft9.com...
 On 18 May 2012, at 14:32, Jim Giner wrote:
 
 OK - I don't yet understand how this works, but it seems to work for 
 almost
 all cases.  The one erroneous result I get is from a value of 0040 (which 
 I
 convert to 00:40 before hitting the regexp).  It comes thru as Ok.  If you
 have a fix for that I'd appreciate it - otherwise I'll have to devote some
 book-time to mastering this string and come up with a fix myself.
 
 Based on your requirements, 00:40 is completely valid. Why do you think it 
 should be invalid?
 
 Don't know how you write the time, but I've never used a time of 00:40. 
 Yes, I realize that my shorthand time string is missing a key ingredient of 
 am/pm, but 12:40 would be the time in my mind regardless of the status of 
 the sun.  In my speccific use of this code, all times would be 'daylight' 
 times so 40 minutes after minute would be a) not practical and b) still not 
 a recognized time in a 12-hour format.  Yes - in 24-hour formats, 00:40 is 
 correct, but my initial post did reference my need of a 12-hour format 
 solution.

Sounds daft to me, but they're your requirements. The fix is simple…

( 0 = (int) $m[1]  12 = (int) $m[1] ) 

becomes

( 1 = (int) $m[1]  12 = (int) $m[1] ) 

-Stuart

-- 
Stuart Dallas
3ft9 Ltd
http://3ft9.com/
--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php



Re: [PHP] regexp novice

2012-05-18 Thread Jim Giner
 times so 40 minutes after minute would be a) not practical and b) still not

I meant to say 40 minutes after MIDNIGHT. 



-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php



Re: [PHP] regexp novice

2012-05-18 Thread Jim Giner

Stuart Dallas stu...@3ft9.com wrote in message 
news:79538829-bfc4-43a4-a413-72247b145...@3ft9.com...
On 18 May 2012, at 14:41, Jim Giner wrote:

 Stuart Dallas stu...@3ft9.com wrote in message
 news:cc22e241-c1df-48e9-bf06-8a638a356...@3ft9.com...
 On 18 May 2012, at 14:32, Jim Giner wrote:

 OK - I don't yet understand how this works, but it seems to work for
 almost
 all cases.  The one erroneous result I get is from a value of 0040 
 (which
 I
 convert to 00:40 before hitting the regexp).  It comes thru as Ok.  If 
 you
 have a fix for that I'd appreciate it - otherwise I'll have to devote 
 some
 book-time to mastering this string and come up with a fix myself.

 Based on your requirements, 00:40 is completely valid. Why do you think 
 it
 should be invalid?

 Don't know how you write the time, but I've never used a time of 00:40.
 Yes, I realize that my shorthand time string is missing a key ingredient 
 of
 am/pm, but 12:40 would be the time in my mind regardless of the status of
 the sun.  In my speccific use of this code, all times would be 'daylight'
 times so 40 minutes after minute would be a) not practical and b) still 
 not
 a recognized time in a 12-hour format.  Yes - in 24-hour formats, 00:40 is
 correct, but my initial post did reference my need of a 12-hour format
 solution.

Sounds daft to me, but they're your requirements. The fix is simple…

( 0 = (int) $m[1]  12 = (int) $m[1] ) 

becomes

( 1 = (int) $m[1]  12 = (int) $m[1] ) 

-Stuart

-- 
Stuart Dallas
3ft9 Ltd
http://3ft9.com/=

Daft is a little harsh.  :)  00:40 is just not a time value that is 
generally accepted.

As for you patch thought - THAT is generally accepted.  Works great now. 
Thank you.

Now all I have to do is read up on this stuff so I can understand how it 
works.  But first - golf! 



-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php



Re: [PHP] regexp novice

2012-05-18 Thread Stuart Dallas
On 18 May 2012, at 14:50, Jim Giner wrote:

 Daft is a little harsh.  :)  00:40 is just not a time value that is 
 generally accepted.


It may appear harsh, but as far as I'm concerned it is daft to make assumptions 
like that. You've essentially disallowed 12:nn am, but allowed 1:nn am, 2:nn 
am, 3:nn am, etc, because you're not validating the data in a non-ambiguous 
way. I have no idea what you're developing, but you're making a big assumption 
about the data that you're getting, which may appear reasonable to you, but to 
me it's daft. Nothing personal, just my opinion, which is all I have to offer.

-Stuart

-- 
Stuart Dallas
3ft9 Ltd
http://3ft9.com/

Re: [PHP] regexp novice

2012-05-18 Thread Andreas Perstinger

On 2012-05-17 22:37, Jim Giner wrote:

Trying to validate an input of a time value in the format hh:mm, wherein
I'll accept anything like the following:
hmm
hhmm
h:mm
hh:mm

in a 12 hour format.  My problem is my test is ok'ing an input of 1300.

Here is my test:

  if (0 == preg_match(/([0][1-9]|[1][0-2]|[1-9]):[0-5][0-9]/,$t))
 return true;
else
 return false;

Can someone help me correct my regexp?


/([0][1-9]|[1][0-2]|^[1-9]):[0-5][0-9]/

The third part of your alternate expressions matches 3:00 from the 
string 13:00 (it ignores the 1 at the beginning). Using ^ avoids this 
because now only one digit is allowed before the :.


Bye, Andreas

--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php



Re: [PHP] regexp novice

2012-05-18 Thread Jim Giner

Stuart Dallas stu...@3ft9.com wrote in message 
news:aba011df-8cdf-4492-be4d-51c2b54c4...@3ft9.com...
On 18 May 2012, at 14:50, Jim Giner wrote:

 Daft is a little harsh.  :)  00:40 is just not a time value that is
 generally accepted.


It may appear harsh, but as far as I'm concerned it is daft to make 
assumptions like that. You've essentially disallowed 12:nn am, but allowed 
1:nn am, 2:nn am, 3:nn am, etc, because you're not validating the data in a 
non-ambiguous way. I have no idea what you're developing, but you're making 
a big assumption about the data that you're getting, which may appear 
reasonable to you, but to me it's daft. Nothing personal, just my opinion, 
which is all I have to offer.

-Stuart

-- 
Stuart Dallas
3ft9 Ltd
http://3ft9.com/

Ok - here's the use.  This feature is the scheduling portion of my 
application.  The scheduling only pertains to basically daytime hours, 
typically 8:00am to  6:00pm.  The information is used for display purposes 
mostly - there is no calculating going on with the data.  Consequently, 
there is no need to be all-inclusive on my allowed times since they will 
never be used.  I just want to validate the entries  to be sure that a valid 
time has been entered for that period of a day.  Noone is going to schedule 
anything for a midnight hour, not even a time after 8:00pm.  Therefore I can 
be very specific about my editing criteria and can limit the entry of data 
that fits within that schedule. 



-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php



Re: [PHP] regexp novice

2012-05-18 Thread tamouse mailing lists
On Thu, May 17, 2012 at 3:37 PM, Jim Giner jim.gi...@albanyhandball.com wrote:
 ok - finally had to come up with my own regexp - and am failing.

 Trying to validate an input of a time value in the format hh:mm, wherein
 I'll accept anything like the following:
 hmm
 hhmm
 h:mm
 hh:mm

 in a 12 hour format.  My problem is my test is ok'ing an input of 1300.

 Here is my test:

  if (0 == preg_match(/([0][1-9]|[1][0-2]|[1-9]):[0-5][0-9]/,$t))
    return true;
 else
    return false;

 Can someone help me correct my regexp?

If the : separator is inserted before the regex check, the following
should suffice:

'/^(0?[1-9]|1[12]):([0-5][0-9])$/'

Test script:

?php

$testvalues=array(1:00,2:30,12:50,11:00,
 13:00,1:69,
 01:00,12:59pm,00:40,00:00,a:00,00);

$valid_re = '/^(0?[1-9]|1[12]):([0-5][0-9])$/';

foreach ($testvalues as $time) {
  if (preg_match($valid_re,$time)) {
echo $time passes\n;
  } else {
echo $time fails\n;
  }
}

Produces output:

php twelvehourtimecheck.php
1:00 passes
2:30 passes
12:50 passes
11:00 passes
13:00 fails
1:69 fails
01:00 passes
12:59pm fails
00:40 fails
00:00 fails
a:00 fails
00 fails

--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php



Re: [PHP] regexp novice

2012-05-17 Thread shiplu
On Fri, May 18, 2012 at 2:37 AM, Jim Giner jim.gi...@albanyhandball.comwrote:

 ok - finally had to come up with my own regexp - and am failing.

 Trying to validate an input of a time value in the format hh:mm, wherein
 I'll accept anything like the following:
 hmm
 hhmm
 h:mm
 hh:mm

 in a 12 hour format.  My problem is my test is ok'ing an input of 1300.

 Here is my test:

  if (0 == preg_match(/([0][1-9]|[1][0-2]|[1-9]):[0-5][0-9]/,$t))
return true;
 else
return false;

 Can someone help me correct my regexp?



I can not correct your regexp. But I must tell you that trying to tweak a
regex for hours is surely **not productive**. If you got any type of text
processing dont always go for regular expression. This problem can be
solved just by simple string parsing.
Here I have done that for you.


function valid_time($time){
$m  = (int) substr($time, -2);
$h  = (int) substr($time, 0, -2);
return ($h=0  $h13  $m=0  $m60);
}


-- 
Shiplu.Mokadd.im
ImgSign.com | A dynamic signature machine
Innovation distinguishes between follower and leader


Re: [PHP] regexp novice

2012-05-17 Thread Yared Hufkens
Try this:
/(0?[1-9]|[12][0-9]):?[0-5][0-9]/

FYI: ? is equal to {0,1}, and [1-9] to [123456789] (and therefore [1-2]
to [12]).


Am 17.05.2012 22:37, schrieb Jim Giner:
 ok - finally had to come up with my own regexp - and am failing.

 Trying to validate an input of a time value in the format hh:mm, wherein 
 I'll accept anything like the following:
 hmm
 hhmm
 h:mm
 hh:mm

 in a 12 hour format.  My problem is my test is ok'ing an input of 1300.

 Here is my test:

  if (0 == preg_match(/([0][1-9]|[1][0-2]|[1-9]):[0-5][0-9]/,$t))
 return true;
 else
 return false;

 Can someone help me correct my regexp? 




-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php



Re: [PHP] regexp novice

2012-05-17 Thread Jim Giner
Yared Hufkens y4...@yahoo.de wrote in message 
news:4fb5667d.7020...@yahoo.de...
 Try this:
 /(0?[1-9]|[12][0-9]):?[0-5][0-9]/

 FYI: ? is equal to {0,1}, and [1-9] to [123456789] (and therefore [1-2]
 to [12]).


 Am 17.05.2012 22:37, schrieb Jim Giner:
 ok - finally had to come up with my own regexp - and am failing.

 Trying to validate an input of a time value in the format hh:mm, wherein
 I'll accept anything like the following:
 hmm
 hhmm
 h:mm
 hh:mm

 in a 12 hour format.  My problem is my test is ok'ing an input of 1300.

 Here is my test:

  if (0 == preg_match(/([0][1-9]|[1][0-2]|[1-9]):[0-5][0-9]/,$t))
 return true;
 else
 return false;

 Can someone help me correct my regexp?




Nope - that didn't work.  Tested it against  1900, 1300 and 13:00 and all 
came thru as OK.
Also - I don't understand at all the following:

 FYI: ? is equal to {0,1}, and [1-9] to [123456789] (and therefore [1-2]
 to [12]).

I know (?) that [1-9] validates any digit from 1 to 9 - I was already using 
that.
And your point about [1-2] doesn't make sense to me since I need to validate 
10:00 which [1-2] in my usage would cause 10:00 to fail.
And I don't know what ? means at all.

FWIW - I couldn't find much in the way of tutorials on the meanings of the 
various chars in regexp's. 



-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php



Re: [PHP] regexp novice

2012-05-17 Thread Govinda
 
 FWIW - I couldn't find much in the way of tutorials on the meanings of the 
 various chars in regexp's. 

this helps alot:

http://www.gskinner.com/RegExr/

you can paste your pattern (needle) in  the top input, and hover over each char 
to see what it means in grep land.
Paste your haystack in the big box (input), under that, to see where all your 
needle will be found. 


 
 
 
 -- 
 PHP General Mailing List (http://www.php.net/)
 To unsubscribe, visit: http://www.php.net/unsub.php
 


--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php



Re: [PHP] regexp novice

2012-05-17 Thread Jim Giner
Thank you !
Govinda govinda.webdnat...@gmail.com wrote in message 
news:3e5dce87-29c1-4679-ad3a-53326435f...@gmail.com...

 FWIW - I couldn't find much in the way of tutorials on the meanings of the
 various chars in regexp's.

this helps alot:

http://www.gskinner.com/RegExr/

you can paste your pattern (needle) in  the top input, and hover over each 
char to see what it means in grep land.
Paste your haystack in the big box (input), under that, to see where all 
your needle will be found.





 -- 
 PHP General Mailing List (http://www.php.net/)
 To unsubscribe, visit: http://www.php.net/unsub.php




-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php



Re: [PHP] regexp novice

2012-05-17 Thread Jim Lucas

On 5/17/2012 1:57 PM, shiplu wrote:

On Fri, May 18, 2012 at 2:37 AM, Jim Ginerjim.gi...@albanyhandball.comwrote:


ok - finally had to come up with my own regexp - and am failing.

Trying to validate an input of a time value in the format hh:mm, wherein
I'll accept anything like the following:
hmm
hhmm
h:mm
hh:mm

in a 12 hour format.  My problem is my test is ok'ing an input of 1300.

Here is my test:

  if (0 == preg_match(/([0][1-9]|[1][0-2]|[1-9]):[0-5][0-9]/,$t))
return true;
else
return false;

Can someone help me correct my regexp?




I can not correct your regexp. But I must tell you that trying to tweak a
regex for hours is surely **not productive**. If you got any type of text
processing dont always go for regular expression. This problem can be
solved just by simple string parsing.
Here I have done that for you.


function valid_time($time){
 $m  = (int) substr($time, -2);
 $h  = (int) substr($time, 0, -2);
 return ($h=0  $h13  $m=0  $m60);
}




That won't work, it doesn't account for the possibility of a single 
digit hour field.


I would do something like this:

?php

$times = array(
'100',  # valid
'1100', # valid
'1300', # invalid
'01:00',# valid
'12:59',# valid
'00:01',# valid
'00:25pm',  # invalid
'', # valid
'a00',  # invalid
'00',   # invalid
);

foreach ( $times AS $time )
echo {$time} is .(valid_date($time)?'valid':'invalid').\n;

function valid_date($time) {
  if ( ( $c_time = preg_replace('|[^\d:]+|', '', $time) ) !== $time )
return false;

  if ( ( $pos = strpos($c_time, ':') ) !== false ) {
list($hour, $minute) = explode(':', $c_time, 2);
  } else {
$break  = (strlen($c_time) - 2);
$hour   = substr($c_time, 0, $break);
$minute = substr($c_time, $break, 2);
  }
  $hour = (int)$hour;
  $minute = (int)$minute;

  if ( strlen($c_time) = 2 )
return false;

  if (
( $hour   = 0  $hour   = 12 ) 
( $minute = 0  $minute = 59 )
  ) {
return true;
  }
  return false;
}

It seems overly complicated, but it does check and error for the various 
things that I could think of for possible input.


Give it a try and let us know.

See it in action here.
http://cmsws.com/examples/php/testscripts/shiplu@gmail.com/pt.php
http://cmsws.com/examples/php/testscripts/shiplu@gmail.com/pt.phps

Jim Lucas

--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php



Re: [PHP] regexp novice

2012-05-17 Thread Jim Giner

Jim Lucas li...@cmsws.com wrote in message 
news:4fb5b89e.8050...@cmsws.com...
 On 5/17/2012 1:57 PM, shiplu wrote:
 On Fri, May 18, 2012 at 2:37 AM, Jim 
 Ginerjim.gi...@albanyhandball.comwrote:

 ok - finally had to come up with my own regexp - and am failing.

 Trying to validate an input of a time value in the format hh:mm, wherein
 I'll accept anything like the following:
 hmm
 hhmm
 h:mm
 hh:mm

 in a 12 hour format.  My problem is my test is ok'ing an input of 1300.

 Here is my test:

   if (0 == preg_match(/([0][1-9]|[1][0-2]|[1-9]):[0-5][0-9]/,$t))
 return true;
 else
 return false;

 Can someone help me correct my regexp?



 I can not correct your regexp. But I must tell you that trying to tweak a
 regex for hours is surely **not productive**. If you got any type of text
 processing dont always go for regular expression. This problem can be
 solved just by simple string parsing.
 Here I have done that for you.


 function valid_time($time){
  $m  = (int) substr($time, -2);
  $h  = (int) substr($time, 0, -2);
  return ($h=0  $h13  $m=0  $m60);
 }



 That won't work, it doesn't account for the possibility of a single digit 
 hour field.

 I would do something like this:

 ?php

 $times = array(
 '100',  # valid
 '1100', # valid
 '1300', # invalid
 '01:00',# valid
 '12:59',# valid
 '00:01',# valid
 '00:25pm',  # invalid
 '', # valid
 'a00',  # invalid
 '00',   # invalid
 );

 foreach ( $times AS $time )
 echo {$time} is .(valid_date($time)?'valid':'invalid').\n;

 function valid_date($time) {
   if ( ( $c_time = preg_replace('|[^\d:]+|', '', $time) ) !== $time )
 return false;

   if ( ( $pos = strpos($c_time, ':') ) !== false ) {
 list($hour, $minute) = explode(':', $c_time, 2);
   } else {
 $break  = (strlen($c_time) - 2);
 $hour   = substr($c_time, 0, $break);
 $minute = substr($c_time, $break, 2);
   }
   $hour = (int)$hour;
   $minute = (int)$minute;

   if ( strlen($c_time) = 2 )
 return false;

   if (
 ( $hour   = 0  $hour   = 12 ) 
 ( $minute = 0  $minute = 59 )
   ) {
 return true;
   }
   return false;
 }

 It seems overly complicated, but it does check and error for the various 
 things that I could think of for possible input.

 Give it a try and let us know.

 See it in action here.
 http://cmsws.com/examples/php/testscripts/shiplu@gmail.com/pt.php
 http://cmsws.com/examples/php/testscripts/shiplu@gmail.com/pt.phps

 Jim Lucas

Thanks for the work you did, but I really wanted to try to solve this using 
the more elegant way, which from my readings over the last year as a new 
php developer, seemed to be the regexp methodology.  I'm so close - it's 
only the 1300,1400,etc. time values that are getting by my expression.

And thank you Shiplu also for your simple, but non-regexp, solution.  Yes - 
it works and I had something similar that was just missing one more check 
when I decided to explore the regexp method.




-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php



Re: [PHP] regexp novice

2012-05-17 Thread Jim Lucas

On 5/17/2012 8:07 PM, Jim Giner wrote:

Jim Lucasli...@cmsws.com  wrote in message
news:4fb5b89e.8050...@cmsws.com...

On 5/17/2012 1:57 PM, shiplu wrote:

On Fri, May 18, 2012 at 2:37 AM, Jim
Ginerjim.gi...@albanyhandball.comwrote:


ok - finally had to come up with my own regexp - and am failing.

Trying to validate an input of a time value in the format hh:mm, wherein
I'll accept anything like the following:
hmm
hhmm
h:mm
hh:mm

in a 12 hour format.  My problem is my test is ok'ing an input of 1300.

Here is my test:

   if (0 == preg_match(/([0][1-9]|[1][0-2]|[1-9]):[0-5][0-9]/,$t))
 return true;
else
 return false;

Can someone help me correct my regexp?




I can not correct your regexp. But I must tell you that trying to tweak a
regex for hours is surely **not productive**. If you got any type of text
processing dont always go for regular expression. This problem can be
solved just by simple string parsing.
Here I have done that for you.


function valid_time($time){
  $m  = (int) substr($time, -2);
  $h  = (int) substr($time, 0, -2);
  return ($h=0   $h13   $m=0   $m60);
}




That won't work, it doesn't account for the possibility of a single digit
hour field.

I would do something like this:

?php

$times = array(
 '100',  # valid
 '1100', # valid
 '1300', # invalid
 '01:00',# valid
 '12:59',# valid
 '00:01',# valid
 '00:25pm',  # invalid
 '', # valid
 'a00',  # invalid
 '00',   # invalid
 );

foreach ( $times AS $time )
 echo {$time} is .(valid_date($time)?'valid':'invalid').\n;

function valid_date($time) {
   if ( ( $c_time = preg_replace('|[^\d:]+|', '', $time) ) !== $time )
 return false;

   if ( ( $pos = strpos($c_time, ':') ) !== false ) {
 list($hour, $minute) = explode(':', $c_time, 2);
   } else {
 $break  = (strlen($c_time) - 2);
 $hour   = substr($c_time, 0, $break);
 $minute = substr($c_time, $break, 2);
   }
   $hour = (int)$hour;
   $minute = (int)$minute;

   if ( strlen($c_time)= 2 )
 return false;

   if (
 ( $hour= 0  $hour= 12 )
 ( $minute= 0  $minute= 59 )
   ) {
 return true;
   }
   return false;
}

It seems overly complicated, but it does check and error for the various
things that I could think of for possible input.

Give it a try and let us know.

See it in action here.
http://cmsws.com/examples/php/testscripts/shiplu@gmail.com/pt.php
http://cmsws.com/examples/php/testscripts/shiplu@gmail.com/pt.phps

Jim Lucas


Thanks for the work you did, but I really wanted to try to solve this using
the more elegant way, which from my readings over the last year as a new
php developer, seemed to be the regexp methodology.  I'm so close - it's
only the 1300,1400,etc. time values that are getting by my expression.

And thank you Shiplu also for your simple, but non-regexp, solution.  Yes -
it works and I had something similar that was just missing one more check
when I decided to explore the regexp method.



How about this instead?

pre?php

$times = array(
'100',  # valid
'1100', # valid
'1300', # invalid
'01:00',# valid
'12:59',# valid
'00:01',# valid
'00:25pm',  # invalid
'', # valid
'a00',  # invalid
'00',   # invalid
);

foreach ( $times AS $time )
  echo {$time} is .(valid_date($time)?'valid':'invalid').\n;

function valid_date($time) {

  if ( ( $c_time = preg_replace('|[^\d\:]+|', '', $time) ) != $time )
return false;

  preg_match('#^(?Phour\d{1,2}):?(?Pminute\d{2})$#', $time, $m);

  if (
  $m 
  ( 0 = (int) $m['hour']12 = (int) $m['hour'] ) 
  ( 0 = (int) $m['minute']  59 = (int) $m['minute'] )
 ) {
return TRUE;
  }

  return false;

}

Let me know.

--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php



Re: [PHP] regexp novice

2012-05-17 Thread Jim Lucas

On 5/17/2012 9:52 PM, Jim Lucas wrote:


How about this instead?

pre?php

$times = array(
'100', # valid
'1100', # valid
'1300', # invalid
'01:00', # valid
'12:59', # valid
'00:01', # valid
'00:25pm', # invalid
'', # valid
'a00', # invalid
'00', # invalid
);

foreach ( $times AS $time )
echo {$time} is .(valid_date($time)?'valid':'invalid').\n;

function valid_date($time) {

if ( ( $c_time = preg_replace('|[^\d\:]+|', '', $time) ) != $time )
return false;

preg_match('#^(?Phour\d{1,2}):?(?Pminute\d{2})$#', $time, $m);

if (
$m 
( 0 = (int) $m['hour']  12 = (int) $m['hour'] ) 
( 0 = (int) $m['minute']  59 = (int) $m['minute'] )
) {
return TRUE;
}

return false;

}

Let me know.



I optimized it a little...

http://www.cmsws.com/examples/php/testscripts/shiplu@gmail.com/pt_regex.php
http://www.cmsws.com/examples/php/testscripts/shiplu@gmail.com/pt_regex.phps

pre?php

$times = array(
  '100',  # valid
  '1100', # valid
  '1300', # invalid
  '01:00',# valid
  '12:59',# valid
  '00:01',# valid
  '00:25pm',  # invalid
  '', # valid
  'a00',  # invalid
  '00',   # invalid
  );

foreach ( $times AS $time )
  echo {$time} is .(valid_time($time)?'valid':'invalid').\n;

function valid_time($time) {
  if (
  preg_match('#^(\d{1,2}):?(\d{2})$#', $time, $m) 
  ( 0 = (int) $m[1]  12 = (int) $m[1] ) 
  ( 0 = (int) $m[2]  59 = (int) $m[2] )
 ) {
return TRUE;
  }
  return FALSE;
}


--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php



Re: [PHP] regexp novice

2012-05-17 Thread Shiplu
Jim L. I did't actually consider that wide range of time values.  Here
is an update. Still  this can be written without help of regex. I must
add one more thing that a '00:01' is invalid in 12 hour format. OP
wants it to be 12-hour format.

function valid_time($time){
$m = substr($time, -2);
$h = (explode(':', substr($time, 0, -2)));
$h = $h[0];
return (is_numeric($h)  is_numeric($m)  $h0  $h13 
$m=0  $m60);
}

See the code in action here http://ideone.com/tSQIb

-- 
Shiplu Mokaddim
Talks: http://shiplu.mokadd.im
Follow: http://twitter.com/shiplu
Innovation distinguishes between follower and leader

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php