将php字符串转换为标题格式

13

我想将一个输入字符串转换为标题格式。

因此,如果我有一个输入字符串:

Name: MR. M.A.D KARIM
我想要生成以下输出字符串。
Name: M.A.D Karim

如果我有一个输入字符串:

Address: 12/A, ROOM NO-B 13

我想制作

Address: 12/A, Room No-B 13

我希望我的输出字符串在任何空格字符后面都有一个大写字母,以及在以下任何字符之后也是如此:.-/

我的当前解决方案是:

ucwords(strtolower($string));

但它将 . - / 后面的字符转换为小写,而我想将它们转换为大写。


可能值得一提的是,这个答案适用于这个问题中的两个输入字符串中的一个。 - mickmackusa
4个回答

10
这是适用于您的解决方案:
<?php


    $str = "Name: MR. M.A.D KARIM";
    $result = "";

    $arr = array();
    $pattern = '/([;:,-.\/ X])/';
    $array = preg_split($pattern, $str, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);

    foreach($array as $k => $v)
        $result .= ucwords(strtolower($v));

    //$result = str_replace("Mr.", "", $result); ->If you don't want Mr. in a String
    echo $result;



?>

输入:

Name: MR. M.A.D KARIM
Address: 12/A, ROOM NO-B 13

输出:

Name: M.A.D Karim
Address: 12/A, Room No-B 13

有没有 PHP 的实用程序库可以做到这一点? - Jonathan
1
为什么在模式中使用X? - user3270784

2

使用Stringy

composer.json

"require": {
    "voku/stringy": "~5.0"
}

PHP

Stringy::create('string')->toTitleCase()

1
虽然对于你们两个输入字符串都不是100%正确,但mb_convert_case()是这种任务的绝佳工具,因为它是一个单一的本地函数。
要实现特定序列的自定义处理,请使用preg_replace_callback()。我将使用多字节安全模式技术,以使整个解决方案保持多字节/Unicode安全。
代码:(演示
function titleCaseSpecial($string)
{
    return preg_replace_callback(
        '~[/.-]\p{Ll}~u',
        function ($m) {
            return mb_strtoupper($m[0], 'UTF-8');
        },
        mb_convert_case($string, MB_CASE_TITLE, 'UTF-8')
    );
}

$strings = [
    'Name: MR. M.A.D KARIM',
    'Address: 12/A, ROOM NO-B 13'
];

var_export(
    array_map('titleCaseSpecial', $strings)
);

输出:

array (
  0 => 'Name: Mr. M.A.D Karim',
  1 => 'Address: 12/A, Room No-B 13',
)

附言:我假设问题中缺少的 Mr. 只是一个发布错误。


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接