当第一个字符是数字时,更改为第一个大写字母

时间:2014-09-05 07:36:36

标签: php ucfirst

我过去做过这个,但不再有我写的东西,也不记得我之前是怎么做过的。在纠正一些用户输入时,将“这是一个项目”称为“这是一个项目”,我当然使用

ucfirst(strtolower($text))

然而,当$ text =“4温度控制”

时,它是没用的

我确定我对此进行了排序,因此“4温度控件”是输出,但是找不到ucfirst跳过非字母字符的引用

3 个答案:

答案 0 :(得分:2)

使用正则表达式:

$text   = "4 temperature controls";
$result = preg_replace_callback('/^([^a-z]*)([a-z])/', function($m)
{
   return $m[1].strtoupper($m[2]);
}, strtolower($text));

ucfirst()根本不是这里的用例,因为它无法预测您的后续角色,它始终使用第一个角色。

答案 1 :(得分:0)

试试这个:

<?php 
$str = "4 temperature controls";
preg_match("~^(\d+)~", $str, $m);
$arr = explode($m[1],$str,2);
echo $m[1]." ".ucfirst(trim($arr[1]));

?>

答案 2 :(得分:0)

可能有更好的方法,但使用简单的preg_match应该有效:

$text = "4 temperature controls";
$match = preg_match('/^([^a-zA-Z]*)(.*)$/', $text, $result);

$upper = ucfirst(mb_strtolower($result[2]));
echo $fixed = $result[1].$upper;