5) { return substr($str, 0, 5) . '-' . substr($str, 5); } return $str; } function format_filename($str, $allow_uppercase = false) { if(!$allow_uppercase) { $str = strtolower($str); } $str = preg_replace('|[^a-z0-9_.-]|i', '_', $str); return preg_replace('|^[.-]|', '_', $str); } function format_path($str, $allow_uppercase = false) { if(!$allow_uppercase) { $str = strtolower($str); } $str = preg_replace('|[^a-z0-9_./-]|i', '_', $str); return preg_replace('|^[.-]|', '_', $str); } function client_path_to_filename($path) { $filename = preg_replace("|.*[:/\\\\]|", '', $path); return format_filename($filename, true); } function format_image_w_h($str) { $fields = explode(' ', $str); if(count($fields) != 3) { return ''; } list($filename, $width, $height) = $fields; $filename = format_path($filename); $width = format_int_0($width); $height = format_int_0($height); return "$filename $width $height"; } function format_image_w_h_thumb_w_h($str) { $fields = explode(' ', $str); if(count($fields) != 6) { return ''; } list($filename, $width, $height, $thumb_filename, $thumb_width, $thumb_height) = $fields; $filename = format_path($filename); $width = format_int_0($width); $height = format_int_0($height); $thumb_filename = format_path($thumb_filename); $thumb_width = format_int_0($thumb_width); $thumb_height = format_int_0($thumb_height); return "$filename $width $height $thumb_filename $thumb_width $thumb_height"; } function format_slug($str) { $str = strtolower($str); $str = str_replace("'", '', $str); $str = preg_replace('/[^a-z0-9-]+/', '-', $str); return trim($str, '-'); } function format_varname($str) { $str = preg_replace("/([a-z])([A-Z])/", "\\1_\\2", $str); # split words on camelCase $str = strtolower($str); $str = preg_replace("/['‘’]/", '', $str); $str = preg_replace('/[^a-z0-9_]+/', '_', $str); return preg_replace('/^([^a-z_])/', "_\\1", $str); } function format_oneline($str) { $str = str_replace("\r", '', $str); return str_replace("\n", '', $str); } function format_unix($str) { return unix_newlines($str); } function format_bool($str) { if($str && $str !== 'No' && $str !== 'False' && $str !== 'false' && $str !== 'no' && $str !== 'N' && $str !== 'n') { return 1; } else { return 0; } } function format_yesno($str) { if($str && $str !== 'No' && $str !== 'False' && $str !== 'false' && $str !== 'no' && $str !== 'N' && $str !== 'n') { return 'Yes'; } else { return 'No'; } } function format_email($str) { # FIXME return trim(format_oneline($str)); } function format_url($str) { # FIXME check for TLD? encode special chars? $str = trim(format_oneline($str)); if($str !== '') { if(strpos($str, ':') === false) { $str = 'http://' . $str; } } return $str; } # pass a string containing only numeric digits. # returns a string containing only numeric digits which is 1 greater. function strplusone($str) { $ret = ''; $a = str_split($str); $carry = 1; while($a) { $digit = array_pop($a); $digit += $carry; $carry = 0; if($digit == 10) { $carry = 1; $digit = 0; } $ret = "$digit$ret"; } if($carry) { $ret = "$carry$ret"; } return $ret; } # rounds properly to the nearest penny (or dollar if you pass false for the 2nd # parameter) and prints like so: $12,456.79 or $12,457 function format_money($str, $display_cents = true) { $str = format_decimal($str); if($str == '') { $str = '0'; } if(strpos($str, '.')) { list($int, $decimals) = explode('.', $str); if(strlen($decimals) == 1) { $decimals .= '0'; } if($display_cents) { if(strlen($decimals) > 2) { # round up to the nearest penny if(substr($decimals, 2, 1) >= 5) { $decimals = strplusone(substr($decimals, 0, 2)); if($decimals == '100') { $decimals = '00'; $int = strplusone($int); } } else { $decimals = substr($decimals, 0, 2); } } $cents = ".$decimals"; } else { if(substr($decimals, 0, 1) >= 5) { $int = strplusone($int); } } } else { $int = $str; if($display_cents) { $cents = '.00'; } } $chars = str_split($int); $output = ''; $comma = 4; while($chars) { --$comma; if($comma == 0) { $comma = 3; $output = ',' . $output; } $char = array_pop($chars); $output = $char . $output; } $output = '$' . $output . $cents; return $output; } function format_dollars($str) { return format_money($str, false); } # date is edited as mm/dd/yyyy but stored as yyyy-mm-dd function format_mdy_to_ymd($str) { if($str == '') return ''; require_once(__DIR__.'/'.'time.php'); return mdy_to_ymd(format_oneline($str)); } # date is yyyy-mm-dd function format_ymd($str) { require_once(__DIR__.'/'.'time.php'); list($year, $month, $day) = ymd_clean($str); return sprintf('%04u-%02u-%02u', $year, $month, $day); } # takes any of: HH :MM HH:MM # returns decimal number of hours # # You probably want to use format_hours() instead because it handles hours with a decimal point. function format_hours_minutes($str) { if(strlen($str) == 0) { return $str; } $pos = strpos($str, ':'); if($pos === false) { $hours = format_int_0($str); $minutes = 0; } elseif($pos == 0) { $hours = 0; $minutes = format_int_0($str); } else { $hours = format_int_0(substr($str, 0, $pos)); $minutes = format_int_0(substr($str, $pos + 1)); } return $hours + ($minutes / 60.0); } # takes any of: HH :MM HH:MM HH.hh(decimal hours) # returns decimal number of hours function format_hours($str) { if(strlen($str) == 0) { return $str; } if(strpos($str, ':') !== false) { return format_hours_minutes($str); } else { return format_decimal($str); } } # takes eg 12:23am # returns decimal number of hours since midnight function format_12hr_to_hours($str) { if(preg_match('|noon|i', $str) === 1) { return 12; } $hours = format_hours($str); if($hours < 12 && preg_match('|p|i', $str) === 1) { $hours += 12; } return $hours; } function format_phone($str) { $str = preg_replace('|[^0-9]|', '', $str); $str = preg_replace('|^1*|', '', $str); $len = strlen($str); $output = ''; if($len < 10 && $len != 7) { #NOT A VALID PHONE NUMBER return $str; } if($len > 10) { $output = ' ext: ' . substr($str, 10); $len = 10; } if($len == 10) { $area = substr($str, 0, 3); $str = substr($str, 3); } $output = substr($str, 3) . $output; $output = substr($str, 0, 3) . '-' . $output; if($area) { $output = "($area) " . $output; } return $output; }