ucword()函数与罗马数字

时间:2014-04-16 05:53:04

标签: php

我正在使用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 以显得美观

6 个答案:

答案 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

Demo

答案 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