2012-05-08 18 views
8

I kesik dizeye CamelCase dönüştürmek için bu işlevi kullanıyorum:camelCase tire - İki başkentlerini yanyana

function camel2dashed($className) { 
    return strtolower(preg_replace('/([^A-Z-])([A-Z])/', '$1-$2', $className)); 
} 

bu tür işler ama ex olduğunda sorunu gidecekseniz. Bu dize: getADog. get-adog döndürür ancak ben get-a-dog

kodunu nasıl değiştirmeliyim? Teşekkür

+2

Yan yana iki büyük harf isteyip istemediğinizi düşündünüz mü? Örneğin, şirket merkezi için companyHQ? Şirket-h-q'yu istemezsin, değil mi? Bu durumda – jedmao

+0

haklısın ama olmayacak. teşekkürler – simPod

+0

Bu camelCase değil. PascalCase btw. –

cevap

26

kullan lookahead assertion:

function camel2dashed($className) { 
    return strtolower(preg_replace('/([a-zA-Z])(?=[A-Z])/', '$1-', $className)); 
} 

çevrimiçi çalışır duruma bakın: Eğer dize bir üst ile başlamaz biliyorsanız bunu yapmanın bir lookahead iddiasını gerekmez ideone

6

Bu hala @sfjedi gibi davalarını olmaz

function camel2dashed($className) { 
    return strtolower(preg_replace('/([A-Z])/', '-$1', $className)); 
} 

: seklinde düsünebiliriz mektup, sadece bu gibi her harf harfinden önce bir tire ekleyebilirsiniz 's "companyHQ" -> "şirket-hq". Bunun için, bölünmemesi gereken izin verilen büyük harfle yazılan alt dizileri açıkça test etmeniz veya bazı genel kuralları belirtmeniz gerekir (ör., Son karakterden önce tire işareti eklemeyin).

Bu virtual duplicate question cevabında daha sofistike alternatifler bulabilirsiniz.

İlgili konular