2010-02-03 10 views
11

Quiero aprovechar cada palabra y combinarlo en 1 palabra, por ejemplo:¿Puede Regex hacer esto más rápido?

home = Inicio
about-us = AboutUs

Aquí es la función que utilizo en este momento, puede ¿Regex lo hace mejor o más eficiente?

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

Respuesta

29

No creo que una expresión regular puede capitalizar las palabras, por lo que aún tendría que tener dos expresiones regulares separados, y creo que este tipo de casos simples, las expresiones regulares son una exageración (piensa cazar ardillas con artillería) . Este código es simple, claro y fácil de entender. ¡NO TOCARLO!

+3

RegEx puede escribir en mayúscula la primera letra, pero su consejo está muerto, KISS. – TravisO

+9

Obviamente, nunca ha cazado ardillas con artillería;) –

+0

Puede escribir en mayúscula la palabra con 'preg' ya que puede pasar la bandera'/e' y poner el código PHP como el "reemplazo". – kennytm

12

Con expresiones regulares, lo que probablemente tiene que usar algo "complejo", como preg_replace_callback(para poder aplicar el strtoupper o ucwords función), lo que haría que su código al menos más difícil de entender - y, posiblemente, más lento, pero lo más importante es que su código es fácil de entender.

Teniendo en cuenta su solución solo funciona y es simple y fácil, probablemente lo mantendría, si estuviera en su lugar.

4

Este código funciona:

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

Pero dudo que sea más rápido, y estoy de acuerdo con los otros comentaristas que no es necesariamente mejor. Disminuir tres líneas a una expresión regular peluda solo es bueno si tienes golfing.

Cuestiones relacionadas