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

Я не могу получить 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 ответ

Вы не можете использовать функцию в значении замены с 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
Другие вопросы по тегам