Строковое форматирование PHP: используйте первые три буквы с заглавной буквы, добавьте дефис и введите первую букву следующего слова для совпадений с strpos () - PullRequest
0 голосов
/ 08 января 2019

Я пытаюсь последовательно отформатировать список строк, которые были непоследовательно загружены в базу данных и, вероятно, по-прежнему будут плохо отформатированы. У меня есть проверка строк, которые начинаются с «нас» или «usw»:

if (strpos($string, 'us') !== false ||
    strpos($string, 'usw' !== false)
    ) {
    // Format string so that the us/usw are uppercase and there is a hyphen after. 
    // Sample strings: ussetup, uswadmin, Uswonsite, etc.
    // Ideal return for above: US-Setup, USW-Admin, USW-Onsite...
}

Некоторые из нас - Us / Usw или us / usw, но все они должны быть только заглавными, после них должен стоять дефис и первая буква следующего слова с заглавной буквы. Я не очень разбираюсь в разборе и форматировании строк в PHP, поэтому любая помощь будет принята с благодарностью!

Ответы [ 2 ]

0 голосов
/ 08 января 2019
function formatString($s)
{
    $s_low = strtolower($s) ; // full string in lower case

    if( substr($s_low, 0, 3) == 'usw' )
        return 'USW-' . ucfirst(substr($s_low, 3)) ;
    elseif( substr($s_low, 0, 2) == 'us' )
        return 'US-' . ucfirst(substr($s_low, 2));
}

Эта функция вернет вторую часть строчными буквами, кроме первой буквы. Если вы хотите сохранить его нетронутым, просто замените $s_low на $s в подстроке.

0 голосов
/ 08 января 2019

Вы можете пойти на preg_replace_callback, например:

$string = "uswsetup"; // example input string
$result = preg_replace_callback("/^(usw?)-?(.)/mi", function ($m) {
    return strtoupper("$m[1]-$m[2]");
}, $string); 

echo $result; // USW-Setup
...