我想将每个单词大写并将其组合成一个单词,例如:
home =主页
about-us =关于我们
这是我目前使用的功能,正则表达式可以做得更好还是更有效?
public function formatClassName($name)
{
$name = str_replace('-', ' ', $name);
$name = ucwords($name);
$name = str_replace(' ', '', $name);
return $name;
}
答案 0 :(得分:29)
我不认为正则表达式可以将这些单词大写,所以你仍然必须有两个单独的正则表达式,我认为在这些简单的情况下,正则表达式是过度的(想想用火炮狩猎松鼠)。此代码简单,清晰且易于理解。请勿触摸它!
答案 1 :(得分:12)
使用正则表达式,您可能必须使用“复杂”的内容,例如preg_replace_callback
(以便能够应用strtoupper
或ucwords
函数),这将使您的代码至少更难理解 - 并且可能更慢,但最重要的是您的代码易于理解。
考虑到您的解决方案正常并且简单易行,如果我在您的位置,我可能会保留它。
答案 2 :(得分: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,只需将三行减少到一个毛状正则表达式。