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
'0000', # 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('#^(?P<hour>\d{1,2}):?(?P<minute>\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
  '0000',     # 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

Reply via email to