2010-02-03 16 views
11

Voglio sfruttare ogni parola e si combinano in 1 parola, ad esempio:È possibile fare un'espressione regolare più veloce?

casa = casa
chi-siamo = ChiSiamo

Qui è la funzione che uso in questo momento, può regex farlo meglio o più efficiente?

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

risposta

29

Non credo che una regex può capitalizzare le parole, in modo da dovreste ancora avere due regex separati, e penso che con questi casi semplici, le espressioni regolari sono eccessivo (si pensi a caccia scoiattoli con l'artiglieria) . Questo codice è semplice, chiaro e facile da capire. NON TOCCARLO!

+3

RegEx può capitalizzare la prima lettera, ma il tuo consiglio è morto, BACIO. – TravisO

+9

Ovviamente, non hai mai cacciato gli scoiattoli con l'artiglieria;) –

+0

Puoi scrivere in maiuscolo con 'preg' dato che puoi passare il flag'/e' e inserire il codice PHP come "sostituzione". – kennytm

12

Con regex, si sarebbe probabilmente usare qualcosa di "complessa", come preg_replace_callback(per essere in grado di applicare la strtoupper o ucwords funzione), il che renderebbe il codice almeno più difficile da capire - e, eventualmente, più lento, ma la cosa più importante è che il tuo codice è facile da capire.

Considerando la soluzione funziona e risulta semplice e semplice, probabilmente lo terrei, se fossi al tuo posto.

4

Questo codice funziona:

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

Ma dubito è più veloce, e sono d'accordo con gli altri commentatori che non è necessariamente migliore. Diminuire tre righe per una regexp pelosa va bene solo se sei golfing.

Problemi correlati