如何用首都划分骆驼的弦,但忽略缩写词

  • 本文关键字:缩写 何用首 划分 php
  • 更新时间 :
  • 英文 :


我想通过将单词通过其大写字母分解,例如:

<?php
$classname = "MyBigClass";
$classname_arr = preg_split('/(?=[A-Z])/', $classname);
$slug = strtolower(implode("-",$classname_arr)); // outputs "my-big-class"
?>

,但我不希望它分解缩写词:

<?php
$classname = "FAQList";
... // outputs "f-a-q-list", I want it to be "faq-list"

我该如何完成?我找不到任何问题,所以提问。

,尽管@wee zel的答案已经接受了(并且有充分的理由)我想进行扩展,这也适用于诸如 MyFAQ

之类的案例
<?php
$classname = "MyFAQ";
$classname_arr = preg_split('/(?=[A-Z][^A-Z])|(?<![A-Z])(?=[A-Z])/', $classname);
$slug = strtolower(implode("-", array_filter($classname_arr))); // outputs "my-faq"
echo $slug;

我刚刚将我的第一次尝试结合在评论(负面的看法)与Wee Zel的LookAhead中。

编辑

这里有一些测试用例。只有最后一个可能不是我们想要的。

<?php
$classnames = Array("MyFAQ", "myFAQ", "FAQList","myClassName", "youHaveAProblem", "MyClassNNName");
function splitCamelCase($classname) {
   $classname_arr = preg_split('/(?=[A-Z][^A-Z])|(?<![A-Z])(?=[A-Z])/', $classname);
   $slug = strtolower(implode("-", array_filter($classname_arr))); // outputs "my-faq"
   return $slug;
}

foreach($classnames as $classname) {
    echo splitCamelCase($classname)."<br>n";
}
// output:
// my-faq
// my-faq
// faq-list
// my-class-name
// you-have-a-problem
// my-class-nn-name

这检查了下一个字母不是大写

$classname_arr = preg_split('/(?=[A-Z][^A-Z])/', $classname);
$slug = strtolower(implode("-", array_filter($classname_arr))); // outputs "my-big-class"
echo $slug;

注意:使用array_filter()删除空元素

最新更新