2010-02-03 40 views
11

我想爲每個字,並將其合併爲1個字,如:可以正則表達式做得更快嗎?

首頁=首頁
關於美=關於我們

這是我目前使用的功能,可以正則表達式做得更好還是更高效?

public function formatClassName($name) 
{ 
$name = str_replace('-', ' ', $name); 
$name = ucwords($name); 
$name = str_replace(' ', '', $name); 
return $name; 
} 

回答

29

我不認爲一個正則表達式可以利用的話,那麼你仍然必須有兩個獨立的正則表達式,我想利用這種簡單的情況下,正則表達式是大材小用(認爲狩獵松鼠用大炮) 。此代碼簡單明瞭,易於理解。不要接觸它!

+3

RegEx可以將第一個字母大寫,但是您的建議已經失效,KISS。 – TravisO 2010-02-03 17:45:38

+9

顯然,你從來沒有用炮兵獵殺過鬆鼠;) – 2010-02-03 18:15:48

+0

因爲你可以傳遞'/ e'標誌並把PHP代碼作爲「替代品」,所以你可以用'preg'來大寫單詞。 – kennytm 2010-02-03 18:21:25

12

用正則表達式,你可能不得不使用一些「複雜」,就像preg_replace_callback(要能應用strtoupperucwords功能),這將使你的代碼至少更難理解 - 可能較慢,但最重要的是你的代碼很容易理解。

考慮到您的解決方案的工作原理簡單易行,如果我在您的位置,我可能會保留它。

4

此代碼:

$in = Array("home", "about-us"); 
foreach ($in as $a) { 

    ## this is the line you're looking for 
    $out = preg_replace('/-?\b(.)/e', "strtoupper('$1')", $a); 

    echo "$a = $out<br/>"; 
} 

但我懷疑它的速度更快,而且我與其他評論者認爲它不一定是更好的同意。如果你是golfing,減少三條線到一個有毛的正則表達式是很好的。

相關問題