Intereting Posts
как заменить специальные символы теми, на которых они основаны на PHP? Неустранимая ошибка: класс «CModelEvent» не найден в CModel.php в строке 189 Как создать несколько массивов PHP в функции для параметров, переданных по ссылке? Как правильно настроить обработчик исключений в Zend? Отключить одно значение параметра внутри тега select, не работающего в IE6Ha Yii2: Как поместить нулевые значения в конец списка объектов при сортировке по возрастанию? Как добавить операторов в конструктор запросов doctrine2, где оператор Функция вызова в функции из другого класса PHP URL перезаписи, содержащий знак вопроса Изображение кодировки Base64 Портал для заказа PHP-заказов Как получить язык пользователя по ip-адресу, используя php? Laravel 4 Beta 5 Session Extend / Replace Взаимное исключение PHP в файле / MySQL, считывание и выполнение операторов из файла с использованием perl оптимизация PHP-кода для меню wordpress nav

camelCase в тире – две столики рядом друг с другом

Я использую эту функцию для преобразования CamelCase в пунктирную строку:

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

он вроде работает, но проблема theres, когда у меня есть для ex. эта строка: getADog . Он возвращает get-adog но я хочу get-a-dog

как мне изменить свой код? благодаря

Используйте утверждение lookahead :

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

Смотрите, как работает онлайн: ideone

Для этого вам не требуется утверждение lookahead, если вы знаете, что ваша строка не начинается с буквы верхнего регистра, вы можете просто вставить дефис перед каждым прописным буквами следующим образом:

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

Это все равно не будет обрабатывать такие случаи, как @ company's hq "companyhQ" -> "company-hq". Для этого вам нужно будет явно протестировать разрешенные заглавные подстроки, которые не должны быть разделены, или указать некоторые общие правила (например, не дописывать дефис перед последним символом).

Вы можете найти более сложные альтернативы в ответах на этот виртуальный дублированный вопрос .