我正试图将php字符串中的每个单词都大写,但该函数无法检测到紧随其后的括号后面的单词。如何使括号后直接跟着的单词被大写?
例子:amharic (ethiopian) .... Amharic (Ethiopian)
(目前使用ucwords(),PHP显示Amharic(ethiopian))
我正试图将php字符串中的每个单词都大写,但该函数无法检测到紧随其后的括号后面的单词。如何使括号后直接跟着的单词被大写?
例子:amharic (ethiopian) .... Amharic (Ethiopian)
(目前使用ucwords(),PHP显示Amharic(ethiopian))
试一下这个,我已经尝试过了。
$text= "amharic (ethiopian)";
echo mb_convert_case($text, MB_CASE_TITLE, "UTF-8");
输出:阿姆哈拉语(埃塞俄比亚)
注意:似乎需要启用PHP上的mbstring函数。
function ucWordWithBracket($edit){
$new_word = str_replace("(","( ",$edit);
$temp = ucwords($new_word);
$new_word = str_replace("( ","(",$temp);
return $new_word;
}
ucWordWithBracket(阿姆哈拉语(埃塞俄比亚))
函数的输出为“阿姆哈拉语(埃塞俄比亚)”;
对于其他需要在包括连字符、括号等其他字符之间应用标题大小写的人。您可以使用带有preg_replace_callback的正则表达式来捕获以破折号分隔或以非字母字符开头的单词。
/** Capitalize first letter if string is only one word **/
$STR = ucwords(strtolower($STR));
/** Correct Title Case for words with non-alphabet charcters ex. Screw-Washer **/
$STR = preg_replace_callback('/([A-Z]*)([^A-Z]+)([A-Z]+)/i',
function ($matches) {
$return = ucwords(strtolower($matches[1])).$matches[2].ucwords(strtolower($matches[3]));
return $return;
}, $STR);
你应该能够使用 preg_replace (http://php.net/manual/en/function.preg-replace.php) 和类似 /[A-Z][a-zA-Z]*/
的正则表达式来解决它。
我认为问题在于php会将空格后的第一个字符大写,因为括号只是空格后的一个字符,所以它被视为单词的第一个字符必须大写,其后的其他字符被视为该单词的字符
因此,为了解决这个问题,我认为你必须在括号和字符之间加上空格,这样php就可以将括号检测为单个字符,而不是一个单词的开始字符 :)