11

入力文字列を Title Case に変換したい。

したがって、入力文字列がある場合

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));

しかし、大文字にしたいのに、の後の文字は小文字のままにします.-/

4

3 に答える 3

1

両方の入力文字列に対して 100% 正しいわけではありませんmb_convert_case()が、単一のネイティブ関数であるため、このタイプのタスクには優れたツールです。

入力文字列内の特定のシーケンスのカスタム処理を実装することpreg_replace_callback()は適切です。マルチバイト セーフ パターン手法を使用して、ソリューション全体がマルチバイト/ユニコード セーフのままになるようにします。

コード: (デモ)

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',
)

PsMr.質問の欠落は単なる投稿エラーであると想定しています。

于 2021-08-12T14:12:20.073 に答える