繁体   English   中英

ucword()函数与罗马数字

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM