【发布时间】:2016-09-15 16:55:51
【问题描述】:
ucwords 和 ucfirst 将字符串的第一个字符转换为大写。
我需要一个函数来大写字母表中的第一个字符。
例如:¡ -> ¡你好! 'h' 应该是大写字母,因为它是字母表中的第一个字符。
在西班牙语中,我们在单词/句子/短语的开头和结尾都有问号,因此使用 ucword/ucfirst 将第一个字符大写并不能解决我的问题。我需要将字符串中的第一个字母字符大写。
¿你最喜欢的运动是什么? -> 在 ucfirst 之后 ->¿ 你最喜欢的运动是什么?
想要的结果:
¿你最喜欢的运动是什么?
//////-----------------/////// 更新//////------- -----------///////
感谢您的回答,我能够对其进行修改并获得最终功能。
这个函数将第一个字母大写(包括这个带重音的西班牙元音 á é í ó ú)
function _ucfirst($palabra) {
$newStr = '';
$match = 0;
foreach(str_split($palabra) as $k=> $letter) {
if($match == 0 && preg_match('/^\p{L}*$/', $letter)){
$newStr .= _ucwords($letter);
break;
}else{
$newStr .= $letter;
}
}
return $newStr.substr($palabra,$k+1);
}
function _ucwords($palabra) {
return mb_convert_case(mb_strtolower($palabra, 'iso-8859-1'), MB_CASE_TITLE, 'iso-8859-1');
}
【问题讨论】:
-
再举一些例子和这样做的理由?为什么要这样做?你的尝试?
-
可能先拆分单词,然后将字符串与非字母字符分开,然后执行 ucfirst 方法。
-
也许:删除所有不是字母表中的字符并将第一个大写?
-
这个问题很清楚,否则没人会回答。这只是一个简单的问题,以前没有人报告过(我搜索了很多问题)这个用例没有详细说明。标记我的问题是不公平的。在西班牙语中,我们在单词/句子/短语的开头和结尾都有问号,因此使用 ucword/ucfirst 将第一个字符大写并不能解决我的问题。我需要将字符串中的第一个字母字符大写
-
我不认为
mb_strtolower()应该是mb_convert_case()之前的必要条件。您的正则表达式模式表明您只有字母作为完整的输入字符串(甚至没有任何空格。这是真的吗?
标签: php uppercase capitalize