Теперь у меня есть метод, который преобразует мои строки с верблюжьим корпусом в случай змеи, но он разбит на три вызова preg_replace()
:
public function camelToUnderscore($string, $us = "-")
{
// insert hyphen between any letter and the beginning of a numeric chain
$string = preg_replace('/([a-z]+)([0-9]+)/i', '$1'.$us.'$2', $string);
// insert hyphen between any lower-to-upper-case letter chain
$string = preg_replace('/([a-z]+)([A-Z]+)/', '$1'.$us.'$2', $string);
// insert hyphen between the end of a numeric chain and the beginning of an alpha chain
$string = preg_replace('/([0-9]+)([a-z]+)/i', '$1'.$us.'$2', $string);
// Lowercase
$string = strtolower($string);
return $string;
}
Я написал тесты для проверки его точности и корректно работает со следующим массивом входов (array('input' => 'output')
):
$test_values = [
'foo' => 'foo',
'fooBar' => 'foo-bar',
'foo123' => 'foo-123',
'123Foo' => '123-foo',
'fooBar123' => 'foo-bar-123',
'foo123Bar' => 'foo-123-bar',
'123FooBar' => '123-foo-bar',
];
Мне интересно, есть ли способ уменьшить мои вызовы preg_replace()
к одной строке, которая даст мне тот же результат. Любые идеи?
ПРИМЕЧАНИЕ: Ссылаясь на этот пост, мое исследование показало мне регулярное выражение preg_replace()
, которое дает мне почти тот результат, который я хочу, за исключением того, что он не работает пример foo123
, чтобы преобразовать его в foo-123
.