我有2个带时间的输入框。
我返回的值的格式类似于
3h 20m 31s
。
如何获取此输入并将其转换为
3:20:31
,以便我可以在我的数据库中使用它?
无需使用正则表达式。如果你有固定的格式,你就可以这样做
$input = "3h 20m 31s";
$input = str_replace("h ",":",$input);
$input = str_replace("m ",":",$input);
$input = str_replace("s","",$input);
或者如果您热衷于正则表达式:
$input = "3h 20m 31s";
$regex = "/^\D*(\d+)\D*(\d+)\D*(\d+)\D*$/";
$matches = array();
preg_match($regex, $input,$matches);
echo implode(":",array_slice($matches,1))
如果您的字符串始终有效,并且您只需要清理/重新格式化字符串,那么可以使用以下示例数据通过以下几种方法来显示前导零的保留:(
$input = "3h 09m 01s";
)Demo
将
h
或 m
替换为带冒号的空格,然后将 s
替换为空。
echo str_replace(['h ', 'm ', 's'], [':', ':'], $input);
使用占位符解析字符串,然后加入填充的数组:
echo implode(':', sscanf($input, '%dh%02sm%02ss'));
将字符串拆分为非数字,然后加入填充的数组:
echo implode(':', preg_split('/\D+/', $input, 0, PREG_SPLIT_NO_EMPTY));
如果您还需要验证,如果您想执行条件行为,可以使用
preg_match()
,或者使用 preg_filter()
将不合格的字符串减少到 null
。
echo preg_match('/^(\d+)h ([0-5]\d)m ([0-5]\d)s$/', $input, $m) ? "$m[1]:$m[2]:$m[3]" : 'invalid';
我个人可能会选择
preg_filter()
,因为在收到发往数据库的格式错误的值时,回退到 null
通常是一个好主意。
echo preg_filter('/^(\d+)h ([0-5]\d)m ([0-5]\d)s$/', '$1:$2:$3', $input);
最后,如果有效输入可能不具有某些组件(例如没有分钟表达式),那么其中一些片段将变得不兼容。