2010-02-03 7 views
11

Je veux profiter de chaque mot et les combiner en 1 mot, par exemple:Est-ce que regex peut le faire plus rapidement?

home =
about-us = AboutUs

Voici la fonction que j'utilise en ce moment, peut regex le fait-il mieux ou plus efficacement?

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

Répondre

29

Je ne pense pas une expression régulière peut tirer les mots, de sorte que vous auriez toujours avoir deux regexes séparés, et je pense que ces cas simples, les expressions régulières sont overkill (penser écureuils de chasse avec de l'artillerie) . Ce code est simple, clair et facile à comprendre. Ne le touchez pas!

+3

RegEx peut mettre en majuscule la première lettre, mais votre avis est mort, KISS. – TravisO

+9

Évidemment, vous n'avez jamais chassé les écureuils avec de l'artillerie;) –

+0

Vous pouvez mettre un mot en majuscule avec 'preg' puisque vous pouvez passer le drapeau'/e' et mettre du code PHP comme "remplacement". – kennytm

12

Avec regex, vous auriez probablement utiliser quelque chose de « complexe », comme preg_replace_callback(pour être en mesure d'appliquer la fonction strtoupper ou ucwords), ce qui rendrait votre code au moins plus difficile à comprendre - et peut-être plus lent, mais le plus important est que votre code soit facile à comprendre. En considérant votre solution fonctionne simplement et est simple et facile, je le garderais probablement, si j'étais à votre place.

4

Ce code fonctionne:

$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/>"; 
} 

Mais je doute qu'il est plus rapide, et je suis d'accord avec les autres commentateurs que ce n'est pas nécessairement mieux. Réduire trois lignes à une regexp poilue est seulement bon si vous êtes .

Questions connexes