[英]ucword() function with roman numerals
我使用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
看起来很漂亮
您可以使用带有正向前瞻的正则表达式的preg_replace_callback()
来实现此目的:
/\b(?=[LXIVCDM]+\b)([a-z]+)\b/i
说明:
\\b
- 在字边界处断言位置 (?=
- 积极前瞻
[LXIVCDM]+
- 匹配列表中的任何字符一次或多次 \\b
- 在字边界处断言位置 )
- 积极前瞻的结束 [az]
- 任何字母表 \\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
请尝试使用此代码:
<?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');
?>
基于此处找到的功能。
您可以使用以下代码并查看我的内联注释
$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
}
ucwords
只会转换大写字符串的第一个字符。
您必须找到所有iii或iv首先将其转换为大写,然后将ucowrds应用于整个字符串。
简单使用如下:
$var = strtolower("class ") . strtoupper("iii");
echo ucwords($var);
//给予III级
尝试这个
<?php
$var = "class iii";
$var = ucfirst(strtolower($var));
echo str_replace(substr($var, 6), strtoupper(substr($var, 6)), $var);
?>
输出:
Class III
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.