Bu hızlı yapmak regex miyim?

3 Cevap php

Ben her kelimeyi büyük harfle ve 1 kelime, örneğin içine birleştirmek istiyorum:

home = Home
about-us = AboutUs

İşte şu anda kullandıkları fonksiyonu, bu daha iyi veya daha verimli mi regex olabilir?

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

3 Cevap

Ben bir regex kelimeleri büyük harf sanmıyorum, bu yüzden hala iki ayrı Regexes sahip olurdu, ve ben böyle basit durumlarda, düzenli ifadeler (topçu ile sincap avı düşünüyorum) overkill olduğunu düşünüyorum. Bu kod, basit, açık ve kolay anlaşılır. IT DOKUNMAYIN!

Regex ile, muhtemelen kodunuzu kılacak, preg_replace_callback (to be able to apply the strtoupper veya ucwords fonksiyonu) gibi, "karmaşık" bir şey kullanmak zorunda en azından zor anlamak - ve muhtemelen daha yavaş, ama en önemli şey kodu anlamak kolay olmasıdır.

Ben senin yerinde olsaydım your solution just works and is simple and easy, muhtemelen, onu tutmak istiyorum göz önüne alındığında.

Bu kod çalışır:

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

Ama daha hızlı şüphe, ve bunu mutlaka daha iyi olmadığını, diğer commenters katılıyorum. Eğer golfing eğer bir kıllı regexp üç satır azalan sadece iyidir.