Re: [PHP] regexp novice
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) && $h>0 && $h<13 && $m>=0 && $m<60); } 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
Re: [PHP] regexp novice
On 5/17/2012 9:52 PM, Jim Lucas wrote: How about this instead? \d{1,2}):?(?P\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 = (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
On 5/17/2012 8:07 PM, Jim Giner wrote: "Jim Lucas" 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 Ginerwrote: 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&& $h<13&& $m>=0&& $m<60); } That won't work, it doesn't account for the possibility of a single digit hour field. I would do something like this: = 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? \d{1,2}):?(?P\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
"Jim Lucas" 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 >> Ginerwrote: >> >>> 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&& $h<13&& $m>=0&& $m<60); >> } >> >> > > That won't work, it doesn't account for the possibility of a single digit > hour field. > > I would do something like this: > > > $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
On 5/17/2012 1:57 PM, shiplu wrote: On Fri, May 18, 2012 at 2:37 AM, Jim Ginerwrote: 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&& $h<13&& $m>=0&& $m<60); } That won't work, it doesn't account for the possibility of a single digit hour field. I would do something like this: = 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
Thank you ! "Govinda" 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
> > 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
"Yared Hufkens" 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
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
On Fri, May 18, 2012 at 2:37 AM, Jim Giner 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? > > > 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 && $h<13 && $m>=0 && $m<60); } -- Shiplu.Mokadd.im ImgSign.com | A dynamic signature machine Innovation distinguishes between follower and leader
[PHP] Re: regexp novice
OOPS FORGOT to mention that I modify the string to add a colon if it is entered without one, so my regexp always expects a ":" to be in the middle. So in actuality - my regexp is 'passing' a value of 13:00 as legitimate, when it should not be. -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP] regexp novice
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