使用方法
- 把英文标题粘进上面的文本框,一行一个标题;上限 20 万字符。页面打开时框里已经预置了 3 行示例:the quick brown fox jumps over the lazy dog、an API for HTML5 and CSS、what is the state-of-the-art of on-device AI?。
- 选择模式。Title Case 是标题式,只有小词保持小写、其余词首字母大写;Sentence case 只把句首和句末标点后的首字母大写;UPPERCASE 与 lowercase 是整行大写 / 整行小写;tOGGLE case 按字符逐位反转大小写。
- 按需勾选两项:保留全大写缩写与内部大写词(默认勾选,
API、NASA、HTML5、iOS这类词原样保留)、扩展小词表(默认不勾,勾上后for、over、with等 50 个介词与连词也进小词表)。 - 点「转换大小写」,或在文本框里按 Ctrl + Enter 立即重算。结果区逐行输出,行数保持不变。
- 结果上方四张卡片显示行数、输入码点数、输出码点数与码点变化——绝大多数情况下变化是 0,只有遇到
ß这类字符才会变,原因见「结果边界」一节。下方 59 行的小词表可以「加载更多」看全、按 TSV「复制对照表」或「导出 CSV」。
这个英文标题大小写转换能解决什么问题
一是把整批标题按同一套规则统一写法。文章标题、栏目名、PPT 页标题、商品名、YouTube 视频名,只要一行一个粘进来,一次转换全部对齐;一行一个的设计也方便你直接粘回表格或 CMS。
二是说清「Title Case 到底怎么算」。很多人以为标题式就是「每个词首字母大写」,于是写出 The Quick Brown Fox Jumps Over The Lazy Dog——把小词 the、of、and 也大写了。这个英文标题大小写转换把规则摊开:小词只在小写位置上保持小写,出现在首词或末词时照样大写。
三是在风格指南之间做切换。同一批标题,按只含 9 个词的精简小词表和按含 59 个词的表转换,结果会差在 for、over、through、vs 这些词上。勾选框让你一眼看到两种口径的差别,而不是凭感觉争论。
四是保护已有的专有名词与缩写。直接整行转小写会把 NASA、API、iOS 变成 nasa、api、ios,再转回来就找不回原来的大小写了;勾上「保留全大写缩写与内部大写词」就能避免这种不可逆的损失。
本页不做这些事:不识别 iPhone、eBay 这类品牌词的正确写法(它只保留原文里已经写对的大小写)、不做英文语法分析、不判断某个词是不是专有名词(那需要词典与上下文)、也不把中文标题转成英文。
五种模式的规则与 59 个大小词
这个英文标题大小写转换的底层只有两个 JavaScript 字符串方法:String.prototype.toUpperCase() 与 toLowerCase()。它们不是简单的 ASCII 加减 32,而是按 Unicode 标准的大小写映射表执行——包含 SpecialCasing.txt 里那些「一对一之外」的映射,所以长度不一定保持不变(下一节给出实测数字)。Title Case 与 Sentence case 则是在这两个方法之上再套一层规则。
Title Case 的处理顺序是:按行拆分 → 每行按空白拆词 → 逐词判定 → 用单个空格拼回。逐词判定分三步:先判断这个词是不是缩写(原词在第 1 位之后还含大写字母,或者整个词是大写加数字,例如 API、HTML5、NASA),是就原样保留;再判断它是不是小词且既不是首词也不是末词,是就转小写;否则把词首字母转大写、其余转小写。带连字符的词按 - 再分段处理一次,所以 state-of-the-art 会得到 State-of-the-Art——中间的 of、the 是小词,保持小写,首段和末段强制大写。
小词表为什么是 59 个。默认生效的是核心表,只有 9 个词:冠词 a、an、the,介词 of、in、on、to,连词 and、or。这是很多中文团队口口相传的那一张「小词表」。勾选「扩展小词表」后会再并入 50 个词——41 个介词(about、above、after、between、for、from、over、through、via、vs、with 等)与 9 个连词(but、so、than、yet、as、nor、if、when、while),合计 59 个。两张表没有交集,所以不会出现重复判定。
这套「小词小写」的思路来自英文排版惯例,最常被引用的是《The Chicago Manual of Style》的 headline-style capitalization 条款,它把冠词、并列连词、所有介词和从属连词都归入小写档;APA、AP 两家风格指南的具体词表和例外各不相同。本页把词表做成可见、可切换、可复制的形式,而不是藏在代码里,就是为了让你按自己团队的口径去核,而不是盲信某一个默认。
Sentence case 的规则是:整行转小写,然后把行首、以及每个 . ! ? 之后的首字母转大写;勾选了缩写保护时,先行保留缩写词再大写句首。注意它不会把专有名词还原成大写的 london、english——那需要词典,本页不做。
完整示例(数值均为实测)
示例是页面里那 3 行标题,共 22 个词、114 个字符。下面把同一段文字在五种模式下的输出并排列出,可以直接和结果区对照:
| 模式 | 输出(三行) |
|---|---|
| Title Case | The Quick Brown Fox Jumps Over the Lazy Dog An API For HTML5 and CSS What Is the State-of-the-Art of On-Device AI? |
| Sentence case | The quick brown fox jumps over the lazy dog An API for HTML5 and CSS What is the state-of-the-art of on-device AI? |
| UPPERCASE | THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG AN API FOR HTML5 AND CSS WHAT IS THE STATE-OF-THE-ART OF ON-DEVICE AI? |
| lowercase | the quick brown fox jumps over the lazy dog an api for html5 and css what is the state-of-the-art of on-device ai? |
| tOGGLE case | THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG AN api FOR html5 AND css WHAT IS THE STATE-OF-THE-ART OF ON-DEVICE ai? |
拆开看 Title Case 这一行:三行里一共 4 个小词被保持小写(第 1 行的 the、第 2 行的 and、第 3 行的 the 与 of),4 个词因为是缩写被原样保留(API、HTML5、CSS、AI?)。an 是小词但位于首词位置,所以照样大写为 An;第 2 行的 For 在默认的核心表下不是小词(for 只在扩展表里),这正是下面那张对照表要说的差异。
小词表与核心 / 扩展口径对照表
同一行标题,默认的核心小词表与勾选后的扩展小词表会给出不同结果,差异只落在小词上:
| 输入标题 | 核心 9 词(默认) | 扩展 59 词 |
|---|---|---|
| the quick brown fox jumps over the lazy dog | The Quick Brown Fox Jumps Over the Lazy Dog | The Quick Brown Fox Jumps over the Lazy Dog |
| an API for HTML5 and CSS | An API For HTML5 and CSS | An API for HTML5 and CSS |
| over the river and through the wood | Over the River and Through the Wood | Over the River and through the Wood |
| html5 roxxors vs css3 | Html5 Roxxors Vs Css3 | Html5 Roxxors vs Css3 |
| what is the state-of-the-art of on-device AI? | What Is the State-of-the-Art of On-Device AI? | What Is the State-of-the-Art of On-Device AI? |
最后一行的两种口径结果完全一样,因为那一行里的 the、of 已经在核心表里;is、on、in 之外没有别的介词。这也说明一件事:词表差 50 个,实际能碰上的差异往往只有一两个词,不必为了对齐风格指南去手工改整批标题。
输入范围与限制:
- 按行处理,行数不变。换行是标题之间的分隔符,不会被转换成空格或被吃掉;空行会被保留为一个空行。
- 每行的多个空格会压成 1 个,行首行尾空白会被去掉。这是为了保证输出是规整的标题文本,而不是原样保留排版。
- 文本上限 20 万字符(按 UTF-16 码元计),示例的 114 个字符只占上限的 0.057%。超限时输入框不再接收新内容,已有内容不会被截断。
- 不做词形还原、不做拼写检查。
roxxors这种刻意拼错的词会被当作普通词首字母大写。 - 不处理中文的行内大小写:中文字符没有大小写,原样保留,只有夹杂的英文单词参与转换。
结果边界与大小写映射的坑
本页不做数值四舍五入,但「字符数」会因为 Unicode 大小写映射而变化,这是最容易被忽略的一条:
| 字符 | 码位 | toUpperCase() | toLowerCase() | tOGGLE 后 |
|---|---|---|---|---|
| ß | U+00DF | SS(1→2 字符) | ß(不变) | SS(1→2 字符) |
| İ | U+0130 | İ(不变) | i̇(1→2 字符) | i̇(1→2 字符) |
| ı | U+0131 | I(不变长) | ı(不变) | I(不变长) |
| Dž | U+01C5 | DŽ(不变长) | dž(不变长) | dž(不变长) |
| fi | U+FB01 | FI(1→2 字符) | fi(不变) | FI(1→2 字符) |
- 德文
ß大写会变成两个字母SS,这是 Unicode 标准规定的完整大小写映射(full case mapping),不是工具的错误。所以 UPPERCASE 模式下输出可能比输入长,页面上的「码点变化」卡片会把它显示出来。 - 土耳其语的两个 i 需要语言环境。默认的
toUpperCase()不是语言敏感的:i会变成I。如果要做土耳其语管道,应当使用toLocaleUpperCase('tr'),本页不提供该选项,以免和常规英文标题的预期冲突。 - 希腊语末位 sigma 是位置敏感的。
ΟΔΟΣ转小写得到οδος,末位是ς(U+03C2)而不是σ(U+03C3),这是 Unicode 专门为希腊文规定的上下文规则,JavaScript 的toLowerCase()确实实现了它。 - Title Case 的「缩写保留」只认已经写对的大小写。输入
api会被当成普通词变成Api,因为工具无法判断它是不是缩写;要保留请写成API再转换。 - 整行本来就是大写时,每个词都会被判定为「缩写」,Title Case 会原样返回。这不是 bug,是「保留缩写」规则的自然结果;想重新排大小写,先用 lowercase 模式转一遍再转 Title Case。
- 首词与末词永远大写,包括它们本身是小词的情况:
out of the会变成Out of The。 - 连字符词按段处理:
state-of-the-art得到State-of-the-Art,中段的小词of、the保持小写。 - 不做任何形式的去重、排序或换行合并;输入几行,输出就是几行。
常见问题
Title Case 里到底哪些词不大写?为什么默认只有 9 个?
默认的核心表是 9 个词:冠词 a、an、the,介词 of、in、on、to,连词 and、or。这是中文团队里流传最广的一张精简小词表,覆盖了 90% 以上的常见标题。要贴近《Chicago Manual of Style》那种「所有介词、连词都小写」的口径,勾上「扩展小词表」,词表会扩到 59 个,多出 for、over、with、through 这类词。
为什么 for、over 在标题里被大写成了 For、Over?
因为它们不在默认的 9 词核心表里。示例第 2 行的 An API For HTML5 and CSS 就是默认口径的结果;勾上扩展小词表之后会变成 An API for HTML5 and CSS。两种写法都有团队在用,本页让你选,而不是替你决定。
为什么第一个词和最后一个词一定要大写?
这是英文标题排版惯例:标题的开头与结尾被视为重音位置,即使它是冠词或介词也大写。示例里 an 是小词但位于行首,所以输出 An;out of the 的末词 the 也会变成 The。这两条例外不做成开关,是为了让输出结果稳定可预期。
为什么输入的 NASA、HTML5、iOS 没有被改成 Nasa、Html5、Ios?
「保留全大写缩写与内部大写词」勾选时,工具会先看原词:如果第 1 位之后还有大写字母(HTML5、API、iOS),或者整词是大写字母加数字的组合(NASA),就判定为缩写并整词原样保留。取消勾选后,这些词会被当成普通词处理,NASA 会变成 Nasa。
为什么 o'brien and the api 里的 api 变成了 Api?
因为输入里写的是小写 api,工具没有任何依据把它判定成缩写,只能按普通词首字母大写。想保留缩写写法,请先把输入改成 API;同理 iphone 会变成 Iphone,而 iPhone 会被原样保留。
整行输入的本来就是大写,为什么 Title Case 没有帮我变小写?
因为整行大写时每个词都满足「缩写」判定,工具就把它们全部原样保留了。正确的用法是先切到 lowercase 模式把整行转成小写,再切回 Title Case 重新排版;或者取消勾选「保留全大写缩写与内部大写词」,让所有词统一按小词规则处理。
tOGGLE 模式下字符数为什么会变多?
因为个别字符的大小写映射不是一对一:德文 ß 转大写是 SS,连字 fi 转大写是 FI,两个都从 1 个字符变成 2 个。结果区上方的「码点变化」卡片会把净变化量算出来,遇到 0 以外的值就说明这段文字里有这类字符。
多行文本是怎么处理的?会不会把换行吃掉?
不会。工具先把输入按换行拆成若干行,每行独立转换,再用换行拼回去,所以输入几行输出就是几行,空行也照原样保留。被改变的是行内的东西:多个连续空格会压成一个,行首行尾的空白会被去掉。
相关工具
- 驼峰大小写转换器:把标题转成
camelCase,适合做变量名与函数名。 - Pascal命名转换:转成
PascalCase,常用于类名、组件名与接口路径。 - Snake大小写转换器:转成
snake_case,数据库字段名与配置文件最常用。 - 短横线大小写转换器:转成
kebab-case,做 URL 别名和 CSS 类名时更合适。 - 交替大小写转换器:按奇偶位交替大小写,和 tOGGLE 的反转规则不同。
- 字母转大写:只做整行大写这一件事,输入更短时比本页更直接。
- 字母转小写:整行小写,与本页的 lowercase 模式等价,适合单独处理一段文本。
- 每行首字母大写:只把每一行的第一个字母大写,不判断小词,适合处理名单与地点列表。
- 文本工具:查看全部文本工具。