命名格式转换
在做一些生成代码或生成配置时经常会遇到命名格式不一样的问题,比如有的地方要用驼峰命名(比如代码的类和遍历),有的地方要用下划线命名(比如数据库字段)。因此写了个小工具来快速将一组单词转换成特定格式的命名。
因为我的使用场景中没有太严苛的性能要求,所以里面用到了正则,并且应该也不是最优解,所以不建议在高并发的场景用(也没做过性能测试)。
在查规范的时候学习到了一些有意思的单词,很形象的形容了命名格式。
比如下划线命名是snake,纯大写的下划线命名(比如常量定义AAA_BBB_CCC)是screaming snake(尖叫蛇)。
大驼峰是pascal(这个其实不太理解为什么是帕斯卡)。
用横线命名(比如url、域名、docker服务名:aaa-bbb-ccc)是kebab(烤肉串)。
<?php
/**
* Created by PhpStorm.
* User: fyn
* Date: 2018/10/9
* Time: 10:40 AM
*/
namespace Fyn\Common;
class StringCase
{
/**
* snake_case
* @param $string
* @return string
*/
public static function snakeCase($string) {
$string = lcfirst($string);
$string = preg_replace_callback('/[A-Z]+/', function ($text) {
return '_'.strtolower($text[0]);
},$string);
$string = preg_replace('/[^a-zA-Z0-9]+/','_',$string);
return $string;
}
/**
* SCREAMING_SNAKE_CASE
* @param $string
* @return string
*/
public static function screamingSnakeCase($string) {
return strtoupper(self::snakeCase($string));
}
/**
* kebab-case
* @param $string
* @return string
*/
public static function kebabCase($string) {
return str_replace('_','-',self::snakeCase($string));
}
/**
* PascalCase
* @param $string
* @return string
*/
public static function pascalCase($string) {
$arr = preg_split('/[^a-zA-Z0-9]/', $string);
$string = implode('',array_map('ucfirst',$arr));
return $string;
}
/**
* camelCase
* @param $string
* @return string
*/
public static function camelCase($string) {
return lcfirst(self::pascalCase($string));
}
/**
* htmlcase
* @param $string
* @return string
*/
public static function htmlCase($string) {
return strtolower(preg_replace('/[^a-zA-Z0-9]+/','', $string));
}
}
使用方法:
use Fyn\Common\StringCase;
echo StringCase::snakeCase("This_is A-test@text"),"\n"; //this_is_a_test_text
echo StringCase::kebabCase("This_is A-test@text"),"\n"; //this-is-a-test-text
echo StringCase::pascalCase("This_is A-test@text"),"\n"; //ThisIsATestText
echo StringCase::camelCase("This_is A-test@text"),"\n"; //thisIsATestText