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