文本大小写/命名格式转换器

输入文本后点击想要的格式按钮,即可立即得到结果。全部处理都在浏览器内完成。

字符数:0单词数:0行数:0

两类不同的转换

页面上的转换分为两类。第一类是直接改变字母大小写(UPPERCASE、lowercase、Title Case、Sentence case、tOGGLE cASE), 标点和换行原样保留,只改字母的大小。第二类是先拆成单词再拼成一个标识符(camelCase、PascalCase、snake_case、 CONSTANT_CASE、kebab-case、dot.case),空格、下划线、连字符、点号等都被视为单词边界,再按新规则重新连接。因此 “user profile image URL”转成 camelCase 是 userProfileImageUrl,再把这个结果转成 kebab-case 则得到user-profile-image-url。无论出发点是哪种写法,只要包含的单词相同,结果就相同,这是第二类转换的好处。

单词边界是怎么找的

标识符转换的质量取决于“在哪里断开”。本工具按下面的顺序寻找边界。

  1. 小写字母或数字后面紧跟大写字母时,在两者之间断开(userName → user Name,getUserID → get User ID)。
  2. 连续大写字母之后接“大写+小写”时,在最后一个大写字母之前断开(HTMLParser → HTML Parser,XMLHttpRequest → XML Http Request)。
  3. 所有不是字母或数字的字符(空格、_、-、.、斜杠、括号等)都当作分隔符并丢弃。

第二条规则避免了缩写被逐个字母拆散。下表是用示例输入运行实际转换函数得到的结果,每一行都出自同一组单词, 因此可以横向比较各列。

输入camelCasePascalCasesnake_caseCONSTANT_CASEkebab-casedot.case
user profile image URLuserProfileImageUrlUserProfileImageUrluser_profile_image_urlUSER_PROFILE_IMAGE_URLuser-profile-image-urluser.profile.image.url
HTMLParserhtmlParserHtmlParserhtml_parserHTML_PARSERhtml-parserhtml.parser
getUserID2getUserId2GetUserId2get_user_id2GET_USER_ID2get-user-id2get.user.id2
order-total_priceorderTotalPriceOrderTotalPriceorder_total_priceORDER_TOTAL_PRICEorder-total-priceorder.total.price
XMLHttpRequestxmlHttpRequestXmlHttpRequestxml_http_requestXML_HTTP_REQUESTxml-http-requestxml.http.request

如“getUserID2”所示,数字会和前面的字母粘在一起(“ID2”是一个整体)。若想在字母和数字之间也断开,请在转换前的输入里加一个空格。 另外有个限制:本工具没有词典,所以像“newyork”这种全小写连在一起的词无法拆成两个。必须有空格、分隔符或大小写变化这类提示才行。

不同格式用在哪里

命名格式不是个人喜好,而是各语言和工具的约定。违反约定通常不影响运行,但会在代码评审和 lint 中被指出,个别环境下还会真的出问题。

Title Case 与 Sentence case 的实际规则

Title Case 把每个单词的首字母大写,但按惯例冠词(a、an、the)、并列连词(and、but、or)和短介词(of、in、on、at、to、by、for)保持小写, 首尾单词则一律大写。勾选“小词保持小写”后,除首尾位置外,列表中的词(a、an、the、and、but、or、nor、for、so、yet、of、in、on、at、to、by、up、as)保持小写; 取消勾选则所有单词都以大写开头。AP、APA、Chicago、MLA 等风格指南在“四个字母以上的介词是否大写”等细节上并不一致, 没有哪个工具能同时满足,提交给出版社或期刊的标题请对照其规定。

Sentence case 只把每句话的第一个字母大写,其余变小写;句号、问号、感叹号之后的空白以及新的一行都算句首。需要注意专有名词和缩写也会被小写: “Paris is in FRANCE.”会变成“Paris is in france.”,转换后请自己改回 France、NASA、iPhone 等。

验算过的转换示例

示例 1:“user profile image URL”有 3 个空格,拆成 4 个单词(user、profile、image、URL)。snake_case 把它们全部小写并用下划线连接, 得到 user_profile_image_url;CONSTANT_CASE 则是 USER_PROFILE_IMAGE_URL。

示例 2:“HTMLParser”按规则 2 拆成“HTML”和“Parser”。snake_case 是 html_parser,kebab-case 是 html-parser, camelCase 是 htmlParser,符合“开头的缩写整体小写”的通用习惯。如果只找“小写接大写”的简单转换器,结果会是“htmlparser”。

Unicode 大小写并不总是简单的

人们容易以为大写一个字母就得到一个字母、再转小写就能还原,但在英语以外这个假设并不成立。本工具使用浏览器内置的toUpperCase() 与 toLowerCase(),遵循 Unicode 的默认(与语言无关的)映射。下表是实际运行这些方法得到的结果。

输入方法结果说明
straßetoUpperCase()STRASSE德语的 ß 转大写后变成两个字母 SS,文本会变长。
İstanbultoLowerCase()i̇stanbul土耳其语带点的大写 İ 转小写后,变成 i 加一个组合用的点符号。
istanbultoUpperCase()ISTANBUL不使用土耳其语规则时会变成普通的 I;土耳其语的正确写法是 İSTANBUL。
ISPARTAtoLowerCase()isparta不使用土耳其语规则时会变成 i;土耳其语应为不带点的 ı(ısparta)。
ΣΑΣtoLowerCase()σας希腊语大写 Σ 在词尾变成 ς,其余位置变成 σ,结果取决于上下文。

土耳其语和阿塞拜疆语是经典的陷阱:它们同时有带点的 i 和不带点的 ı,因此“I”和“i”并不互为大小写。要处理好需要指定语言的函数, 比如 toLocaleUpperCase('tr'),本页面没有调用,土耳其语文本请人工核对。汉字、日文假名、韩文、数字和符号本来就没有大小写之分, 会原样保留,所以中英混排的句子做大写转换时只有英文字母会变。命名格式会把中文按空格或符号拆开再连接(例如“会员 信息 修改”→ 会员_信息_修改), 但标识符能否使用中文取决于编程语言和团队规范,使用前请确认。

一次转换多行

常见的需求是把二十个列名一次转成 snake_case。勾选“命名格式按行分别转换”后,每行被当作独立的标识符,行数保持不变;取消勾选则整段文本合并成一个标识符, 换行也会被当作分隔符消失。UPPERCASE、lowercase、Title Case、Sentence case 与 tOGGLE cASE 始终保留换行和标点。

常见误区

不适合使用本工具的情况

要在整个代码库中重命名标识符并同步所有引用处,需要用编辑器的“重命名符号”功能。本页只改文本,不理解代码含义, 也不能自动识别专有名词或检查语法。

转换之后

转换好的清单可以用字数统计核对数量,用文本对比逐行查看改动前后的差异。要批量查找并替换名称,可先在正则表达式测试器里用示例文本试验; 若转换后的名称要放进 JSON,可用 JSON 格式化检查语法。

常见问题

中文或日文文本也能转换吗?

只有拉丁、希腊、西里尔等文字有大小写之分。中文、日文、韩文文本点大小写按钮不会有任何变化。camelCase、snake_case 等是按空格和符号拆分后连接,任何文字都能运行,但它们本是为英文代码命名设计的。

我输入的文本会被保存吗?

不会。所有转换都在浏览器内完成,文本不会发送到服务器。

camelCase 和 PascalCase 有什么区别?

两者都不使用分隔符、每个单词首字母大写,区别只在第一个字母:camelCase 以小写开头(userName),PascalCase 以大写开头(UserName)。许多语言用 camelCase 命名变量和函数,用 PascalCase 命名类、类型和组件。

为什么 HTMLParser 变成 html_parser 而不是 h_t_m_l_parser?

连续大写字母后面接“大写+小写”时,工具会在最后那个大写字母之前断开(这里是 L 与 P 之间),因此 HTML 被当作一个词,得到 html_parser 和 html-parser 这样自然的结果。

数字是怎么处理的?

数字与相邻字母保持为一个整体。“version2 update”在 snake_case 下是“version2_update”。若想把数字单独分开,请先在输入中加空格。

换行或标点消失了怎么办?

命名格式会把所有非字母数字字符当作分隔符,所以这是正常现象。想保留行数请勾选“命名格式按行分别转换”;想保留标点请使用 UPPERCASE、lowercase、Title Case 或 Sentence case。