Как заменить подчеркивания пробелами и применить регистр заголовков к строкам имен столбцов с помощью preg_replace_callback ()? - PullRequest
0 голосов
/ 04 октября 2018

Я не могу заставить preg_replace() изменить на preg_replace_callback().

В попытке сделать столбцы таблицы базы данных более удобными для человека, когда я их отображаю, я пытаюсь заменить подчеркивания пробелами и заставить каждое слово начинаться с заглавной буквы.

function tidyUpColumnName($_colName) {

    // Check for blank and quit
    if(empty($_colName)) return false;

    // Replace underscore and next lowercase letter with space uppercase and Capitalise first letter
    $newColName = ucfirst(preg_replace_callback('/_[a-z]/uis', '" ".substr(strtoupper("$0"), 1)', $_colName));
    return $newColName;
}

1 Ответ

0 голосов
/ 04 октября 2018

Вы не можете больше использовать функцию в качестве значения замены с preg_replace().Вот почему используется preg_replace_callback().

preg_replace_callback() ожидает функцию во втором параметре.

preg_replace_callback('/_([a-z])/ui', function($m) { return " " . strtoupper($m[1]); }, $_colName)

Вам не нужен модификатор шаблона s, потому что вы не '• используя в своем шаблоне любые символы ..

Вы можете избежать substr(), если будете использовать группу захвата и назначить $m[1] в своей функции замены.


Хм, если я понимаю ваше намерение, вам вообще не нужно регулярное выражение ...

Код: ( Демо )

$string = "what_the_hey_now";    
// echo ucwords(str_replace("_", " ", $string));  // not multibyte safe
echo mb_convert_case(str_replace("_", " ", $string), MB_CASE_TITLE, "UTF-8");

Вывод:

What The Hey Now
...