camelCase to dash - две заглавные буквы рядом друг с другом
Я использую эту функцию для преобразования camelCase в пунктирную строку:
function camel2dashed($className) {
return strtolower(preg_replace('/([^A-Z-])([A-Z])/', '$1-$2', $className));
}
Это вроде как работает, но есть проблема, когда у меня есть, например, эта строка: getADog
. Он возвращает get-adog
, но я хочу get-a-dog
Как я должен изменить свой код? Спасибо
2 answers
Используйте утверждение с оглядкой:
function camel2dashed($className) {
return strtolower(preg_replace('/([a-zA-Z])(?=[A-Z])/', '$1-', $className));
}
Посмотрите, как он работает онлайн: ideone
Для этого вам не нужно предварительное утверждение, если вы знаете, что ваша строка не начинается с прописной буквы, вы можете просто вставить дефис перед каждой прописной буквой, как это:
function camel2dashed($className) {
return strtolower(preg_replace('/([A-Z])/', '-$1', $className));
}
Это все равно не будет обрабатывать такие случаи, как "COMPANYHQ" @sfjedi -> "штаб-квартира компании". Для этого вам придется явно проверить наличие разрешенных подстрок с заглавной буквы, которые не следует разделять, или указать некоторые общие правила (например, не ставить дефис перед последним символом).
Вы можете найти некоторые более сложные альтернативы в ответах на этот виртуальный дублирующий вопрос.