mb_convert_case函數可以將字符串中的字符按指定的大小寫轉換,支持三種模式:
MB_CASE_UPPER :轉換為全大寫。
MB_CASE_LOWER :轉換為全小寫。
MB_CASE_TITLE :將每個單詞的首字母轉換為大寫,其餘字母小寫。
示例代碼:
<span><span><span class="hljs-variable">$string</span></span><span> = </span><span><span class="hljs-string">"hello world! 你好,世界!"</span></span><span>;
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-title function_ invoke__">mb_convert_case</span></span><span>(</span><span><span class="hljs-variable">$string</span></span><span>, MB_CASE_UPPER, </span><span><span class="hljs-string">"UTF-8"</span></span><span>); </span><span><span class="hljs-comment">// 輸出:HELLO WORLD! 你好,世界!</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-title function_ invoke__">mb_convert_case</span></span><span>(</span><span><span class="hljs-variable">$string</span></span><span>, MB_CASE_LOWER, </span><span><span class="hljs-string">"UTF-8"</span></span><span>); </span><span><span class="hljs-comment">// 輸出:hello world! 你好,世界!</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-title function_ invoke__">mb_convert_case</span></span><span>(</span><span><span class="hljs-variable">$string</span></span><span>, MB_CASE_TITLE, </span><span><span class="hljs-string">"UTF-8"</span></span><span>); </span><span><span class="hljs-comment">// 輸出:Hello World! 你好,世界!</span></span><span>
</span></span>正則表達式(RegEx)是一種強大的字符串模式匹配工具。在處理複雜的字符串轉換時,正則表達式能夠幫助我們精準地定位需要轉換的部分,比如特定的單詞、字母或符號,進而對這些部分進行大小寫轉換。
通過正則表達式,我們可以定義一些規則,結合mb_convert_case對匹配到的部分進行轉換,達到更加靈活的效果。
假設我們有一個字符串,需要將其中的每個單詞首字母大寫,其他字母小寫,但同時我們希望保留某些特定的單詞(如“PHP”)的大小寫不受影響。這個時候,可以通過正則表達式找到每個單詞並使用mb_convert_case來實現。
示例代碼:
<span><span><span class="hljs-variable">$string</span></span><span> = </span><span><span class="hljs-string">"this is a php test, check PHP again."</span></span><span>;
</span><span><span class="hljs-variable">$pattern</span></span><span> = </span><span><span class="hljs-string">'/\b(\w+)\b/'</span></span><span>; </span><span><span class="hljs-comment">// 匹配單詞邊界</span></span><span>
</span><span><span class="hljs-variable">$callback</span></span><span> = </span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> (</span><span><span class="hljs-params"><span class="hljs-variable">$matches</span></span></span><span>) {
</span><span><span class="hljs-comment">// 對匹配的單詞進行首字母大寫處理</span></span><span>
</span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-title function_ invoke__">mb_convert_case</span></span><span>(</span><span><span class="hljs-variable">$matches</span></span><span>[</span><span><span class="hljs-number">0</span></span><span>], MB_CASE_TITLE, </span><span><span class="hljs-string">'UTF-8'</span></span><span>);
};
</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">preg_replace_callback</span></span><span>(</span><span><span class="hljs-variable">$pattern</span></span><span>, </span><span><span class="hljs-variable">$callback</span></span><span>, </span><span><span class="hljs-variable">$string</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$result</span></span><span>; </span><span><span class="hljs-comment">// 輸出:This Is A Php Test, Check Php Again.</span></span><span>
</span></span>在這個例子中,正則表達式/\b(\w+)\b/匹配了所有單詞邊界的內容(即每個單詞),然後通過preg_replace_callback回調函數,使用mb_convert_case將每個單詞的首字母轉換為大寫,其餘字母小寫。
有時我們可能只需要對某些特定的單詞進行大小寫轉換,而不影響其他內容。例如,我們可以將所有的“php”轉為“PHP”,而其他單詞保持不變。
示例代碼:
<span><span><span class="hljs-variable">$string</span></span><span> = </span><span><span class="hljs-string">"I love php, and I am learning php in 2025."</span></span><span>;
</span><span><span class="hljs-variable">$pattern</span></span><span> = </span><span><span class="hljs-string">'/\bphp\b/i'</span></span><span>; </span><span><span class="hljs-comment">// 匹配“php”,不區分大小寫</span></span><span>
</span><span><span class="hljs-variable">$callback</span></span><span> = </span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> (</span><span><span class="hljs-params"><span class="hljs-variable">$matches</span></span></span><span>) {
</span><span><span class="hljs-comment">// 將匹配到的“php”轉換為大寫</span></span><span>
</span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-title function_ invoke__">mb_convert_case</span></span><span>(</span><span><span class="hljs-variable">$matches</span></span><span>[</span><span><span class="hljs-number">0</span></span><span>], MB_CASE_UPPER, </span><span><span class="hljs-string">'UTF-8'</span></span><span>);
};
</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">preg_replace_callback</span></span><span>(</span><span><span class="hljs-variable">$pattern</span></span><span>, </span><span><span class="hljs-variable">$callback</span></span><span>, </span><span><span class="hljs-variable">$string</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$result</span></span><span>; </span><span><span class="hljs-comment">// 輸出:I love PHP, and I am learning PHP in 2025.</span></span><span>
</span></span>這裡的正則表達式/\bphp\b/i匹配了所有不區分大小寫的“php”單詞。 mb_convert_case將它們轉換為大寫。
在一些複雜的場景中,可能需要根據字符在上下文中的位置來決定是否轉換大小寫。比如,某些縮寫或代碼片段(如“API”)應保持原樣,而其他單詞則可以進行大小寫轉換。
示例代碼:
<span><span><span class="hljs-variable">$string</span></span><span> = </span><span><span class="hljs-string">"the API is a powerful tool, API is awesome."</span></span><span>;
</span><span><span class="hljs-comment">// 使用負向前瞻來排除已出現的“API”</span></span><span>
</span><span><span class="hljs-comment">// 這樣就可以保證“API”不被轉換,而其他單詞正常轉換</span></span><span>
</span><span><span class="hljs-variable">$pattern</span></span><span> = </span><span><span class="hljs-string">'/\b(?!API\b)\w+\b/'</span></span><span>;
</span><span><span class="hljs-variable">$callback</span></span><span> = </span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> (</span><span><span class="hljs-params"><span class="hljs-variable">$matches</span></span></span><span>) {
</span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-title function_ invoke__">mb_convert_case</span></span><span>(</span><span><span class="hljs-variable">$matches</span></span><span>[</span><span><span class="hljs-number">0</span></span><span>], MB_CASE_TITLE, </span><span><span class="hljs-string">'UTF-8'</span></span><span>);
};
</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">preg_replace_callback</span></span><span>(</span><span><span class="hljs-variable">$pattern</span></span><span>, </span><span><span class="hljs-variable">$callback</span></span><span>, </span><span><span class="hljs-variable">$string</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$result</span></span><span>; </span><span><span class="hljs-comment">// 輸出:The API is A Powerful Tool, API is Awesome.</span></span><span>
</span></span>在這個例子中,我們通過負向前瞻(?!API\b)來確保“API”不被轉換,同時其他單詞都進行了首字母大寫的轉換。
結合mb_convert_case和正則表達式,可以實現更為複雜和靈活的大小寫轉換。這種方法尤其適用於需要根據特定規則(如匹配特定單詞、排除某些部分或根據上下文)來控製字符大小寫的場景。無論是簡單的全局大小寫轉換,還是需要精細控制的情形, mb_convert_case和正則表達式的組合都能提供非常高效且定制化的解決方案。