PHP字符串格式:对于strpos()匹配项,请大写前三个字母,添加连字符并为下一个单词的首字母大写

时间:2019-01-07 21:43:56

标签: php string parsing string-formatting php-7

我试图一致地格式化不一致地上载到数据库中的字符串列表,并且很可能会继续对其进行格式化。我检查了以“ us”或“ 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 :(得分:3)

您可能会选择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

答案 1 :(得分:3)

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