我正在使用ucword函数来解释第一个单词作为ucwords(strtolower($var))
的情况,但有时我希望这个单词是uppar case。请参阅以下示例以清楚地了解。
$var = "class iii";
echo ucwords(strtolower($var));
gives as **Class Iii or Class Ii or Class Iv**
我希望它显示为 Class III or Class II or Class IV
以显得美观
答案 0 :(得分:4)
您可以使用preg_replace_callback()
和使用正向前瞻的正则表达式实现此目的:
/\b(?=[LXIVCDM]+\b)([a-z]+)\b/i
<强>解释强>
\b
- 在字边界处断言位置(?=
- 积极前瞻
[LXIVCDM]+
- 匹配列表中的任何字符一次或多次\b
- 在字边界处断言位置)
- 结束了积极向前看[a-z]
- 任何字母\b
- 在字边界处断言位置i
- 使匹配不区分大小写的模式修饰符<强>代码:强>
$str = "class iii";
$string = preg_replace_callback('/\b(?=[LXIVCDM]+\b)([a-z]+)\b/i',
function($matches) {
return strtoupper($matches[0]);
}, ucwords(strtolower($str)));
echo $string;
<强>输出:强>
Class III
答案 1 :(得分:1)
请尝试使用此代码:
<?php
function xucwords($string)
{
$words = split(" ", $string);
$newString = array();
foreach ($words as $word)
{
if(!preg_match("/^m{0,4}(cm|cd|d?c{0,3})(xc|xl|l?x{0,3})(ix|iv|v?i{0,3})$/", $word)) {
$word = ucfirst($word);
} else {
$word = strtoupper($word);
}
array_push($newString, $word);
}
return join(" ", $newString);
}
echo xucwords('class iii');
?>
基于找到的函数here。
答案 2 :(得分:0)
您使用以下代码并查看我的内联评论
$var = "class iii";
echo upperCaseCustomFunction($var);
upperCaseCustomFunction($string) {
$arr = explode(" ",$string);
$stringPartOne = ucwords(strtolower($arr[0])); // will return Class
$stringPartTwo = strtoupper(strtolower($arr[1])); // Will return III
return $tringPartOne." ".$stringPartTwo; // will return Class III
}
答案 3 :(得分:0)
ucwords
将仅以大写字母转换字符串的第一个字符。
您必须找到所有iii或iv首先将其转换为大写,然后将ucowrds应用于整个字符串。
答案 4 :(得分:-1)
简单使用如下:
$var = strtolower("class ") . strtoupper("iii");
echo ucwords($var);
//给予第三类
答案 5 :(得分:-1)
试试这个
<?php
$var = "class iii";
$var = ucfirst(strtolower($var));
echo str_replace(substr($var, 6), strtoupper(substr($var, 6)), $var);
?>
输出:
Class III