Вы можете использовать preg_replace
для замены любого экземпляра строчной буквы, за которой следует заглавная буква, вашим вариантом с нижним тире-нижним тире:
$dashedName = preg_replace('/([^A-Z-])([A-Z])/', '$1-$2', $className);
Затем следует strtolower()
, чтобы позаботиться о любых оставшихся заглавных буквах:
return strtolower($dashedName);
Полная функция здесь:
function camel2dashed($className) {
return strtolower(preg_replace('/([^A-Z-])([A-Z])/', '$1-$2', $className));
}
Для объяснения используемого регулярного выражения:
/ Opening delimiter
( Start Capture Group 1
[^A-Z-] Character Class: Any character NOT an uppercase letter and not a dash
) End Capture Group 1
( Start Capture Group 2
[A-Z] Character Class: Any uppercase letter
) End Capture Group 2
/ Closing delimiter
Что касается строки замены
$1 Insert Capture Group 1
- Literal: dash
$2 Insert Capture Group 2