文字转 snake_case underscore_case 免费 在线 安全
贴上一行,立刻读成 snake_case。全部在你的浏览器里完成——敲进去的东西不会被送到任何地方——而且规则跟的是本页的语言,不是英文。
换一种写法
不上传任何文件
同一行,七种写法全在这里
| 写法 | 同一行,照那样写 |
|---|---|
| 大写 | CRÈME BRÛLÉE 两份 — STRASSE 17, FOOBAR |
| 小写 | crème brûlée 两份 — straße 17, foobar |
| Title Case | Crème Brûlée 两份 — Straße 17, Foobar |
| snake_case | crème_brûlée_两份_straße_17_foo_bar |
| kebab-case | crème-brûlée-两份-straße-17-foo-bar |
| camelCase | crèmeBrûlée两份Straße17FooBar |
| 一个 URL 地址 | creme-brulee-两份-strasse-17-foobar |
这些写法从哪里来
大写字母和小写字母曾经是两套不同的字母。大写来自罗马,用凿子刻在石头上;小写源自加洛林小写体,由一支在羊皮纸上飞奔的笔塑成。印刷工把两者放在不同的字盘里——上面的一盘和下面的一盘——字盘早已不在,名字却留了下来。编程里的那些写法要年轻得多,它们被发明出来只为解决一件事:名字里不能有空格。snake_case 出自早期的 C,camelCase 出自 Smalltalk,kebab-case 出自 Lisp,而网址里的 slug 则出自一种需要:把一个供人阅读的标题放进一个不允许空格与变音符号的地址里。
你会在哪里遇到它们
每个词首字母大写属于标题和书籍封面;只有句首大写的写法属于其余几乎一切,并且越来越属于界面,因为读起来更快。snake_case 为数据库列和 Python 变量命名;camelCase 为 JavaScript 变量和 Java 方法命名;kebab-case 为 CSS 类名和网页项目中的文件名命名。slug 则是把一篇文章的标题变成地址最后一段的那个东西,也是此处唯一会被搜索引擎读到的转换。
常见问题
为什么转成大写有时会改变字母的个数?
因为大小写是语言的属性,而不是字符的属性。德语的 ß 转成大写是 SS,于是一个字母变成了两个。土耳其语有带点的 i 和不带点的 ı,而 i 的大写是 İ 而非 I——在这里弄错,一个土耳其词就变成了另一个词。本站的转换遵循各页自身语言的规则,所以同样的输入在土耳其语页面和英语页面上可能给出不同的结果。
slug 为什么要去掉变音符号和标点?
因为一个地址必须经得起被复制进消息、印在纸上、再用手重新敲一遍。带变音符号的字母在今天的网址里是合法的,但复制时会被百分号编码,一个本来可读的地址就变成了一串符号。把它们削减为朴素的字母、数字和连字符,地址才保持可读、好分享,并且无论出现在哪里都一模一样。
结果精确吗?
两个单位若以整数互相定义,那就是精确的——本页在数字上方说明了这一点,唯一的舍入在于显示多少位。若比值没有有限小数,本页给出十二位有效数字,并说明这个关系是近似的,而不是装作不是。
我敲进去的东西会离开我的设备吗?
不会。运算在你的浏览器里进行;没有任何东西被上传,也没有接收它的服务器。页面加载一次之后,断网也照样能用。
为什么要把文本转成 snake_case
程序员不能把变量命名为 annual report total,因为名字不能包含空格。数据库的列不能叫 Customer First Name。一个叫 Final Draft (2).docx 的文件,迟早会惹恼某个脚本。在这个过程的某处,人类的短语必须变成一个单词,而许多社区选定的形式就是 snake_case(蛇形式):所有字母都是小写,单词用下划线连接,annual_report_total、customer_first_name、final_draft_2。把文本转成 snake_case,就是拿任何短语,在任何状态下,一步把它变成那种形式。
粘贴一行,就能读到它的 snake_case 形式。转换在你的浏览器中进行,你输入的任何内容都不会发送到任何地方,规则遵循本页的语言而不是英语。它把这一行切成单词,转为小写,并用下划线连接。已经写成 camelCase 的一行也会在它的大写处被切开,所以 fooBar 变成 foo_bar。下面你会看到这具体意味着什么、丢掉了什么、本页如何对待不同语言中那些棘手的字母、snake_case 在哪里是惯例、在哪里不是,以及匆忙把文本转成 snake_case 的人容易掉进的陷阱。
转换做什么
切开,转小写,连接
本页首先把这一行切成单词。然后把每个转为小写,并用下划线连接。一行 Crème brûlée for 2 — straße 17, fooBar 会变成 crème_brûlée_for_2_straße_17_foo_bar。重音符号被保留,数字作为独立的单词存在,破折号和逗号消失了,而 fooBar 被切成了两半,因为其中的大写字母标出了一个边界。
切口落在哪里
单词边界是空格、标点符号、破折号、符号,或词内从小写字母到大写字母的变化。所以短语 customerFirstName、短语 Customer First Name 和短语 customer-first-name 全都变成 customer_first_name。这就是转换在实践中的长处:它接受几乎任何起点,并且总是到达同一个地方。
复制结果
结果旁边的按钮把它复制到剪贴板。把它粘贴到需要这个名字的编辑器、数据库模式或文件对话框里。
转换不做什么
它不保留标点
逗号、句点和破折号是单词之间的边界,而不是要带过去的字符。这正是文件名或数据库列所需要的,却不是散文所需要的。如果你让一个句子经过本页,它回来时是一个名字,而不是一个句子,原来的标点就消失了。
它不去掉重音
这一行保留它带重音的字母:crème_brûlée。许多系统接受它们,但有些不接受,包含它们的名字可能在较老的工具里引起麻烦。如果你需要纯字母,请使用 URL slug 页面,它会去掉拉丁字母上的符号。
它不检查名字在你的语言里是否有效
编程语言有它们自己的规则。有些禁止以数字开头的名字,有些保留像 class 或 return 这样的词。本页把文本变成形状正确的名字,而你仍然需要确保这个名字在你使用的地方是合法的。像 2 for 1 offer 这样的短语变成 2_for_1_offer,大多数语言在开头就会拒绝它。
语言很重要
不带空格书写的文字
切分成单词需要边界。中文和日文书写时不带空格,所以这些文字的一行会作为单个单词回来。本页宁可这样说明,也不在它猜测的地方切开,因为错误的切分会造出一个看似合理却意思错误的名字。
土耳其语与带点的 i
转小写遵循本页语言的规则。在土耳其语里,I 的小写形式是不带点的 ı,而 İ 的小写形式是 i。套用英语规则的转换器会改变这些词。本页遵循它所使用的语言。
德语与尖音 s
德语的 ß 本来就是小写字母,会被保留,如 straße_17。大写的 STRASSE 回来时是 strasse,因为大写形式不记得它来自 ß 还是来自两个字母。
从右到左的文字和印度诸文字
阿拉伯语、希伯来语和印度诸文字的单词之间有空格,没有大小写,所以本页用下划线连接它们的单词,不动那些字母。某个工具是否接受这样的名字,则是另一个问题。
snake_case 在哪里是惯例
Python 和 Ruby
Python 风格指南建议函数、变量和模块使用 snake_case,Ruby 遵循同样的习惯。如果你用其中任何一种写代码,你的名字几乎总是这种形式。
数据库
SQL 中的表名和列名通常是 snake_case:customer_id、created_at、order_total。它避免了给名字加引号的必要,并且在各数据库系统之间是安全的,有些系统会把不带引号的名字折叠成同一种大小写,把 camelCase 变成一串无法辨认的字母。
数据文件和 API
许多网络服务在它们的 JSON 中使用 snake_case 键,而为进一步处理而导出的电子表格常常带有 snake_case 表头。如果你的数据正经过 CSV 转 JSON,表头行会变成键,而整齐的 snake_case 表头使结果易于使用。
常量和环境变量
常量和环境变量习惯上用大写字母加下划线书写:MAX_RETRIES、DATABASE_URL。得到它们的办法是先把文本转成 snake_case,然后用把文本转成大写把结果升为大写。
文件名
带下划线的小写是在每个系统上都安全的文件名,而且排序和搜索都可预测。许多摄影师、研究人员和管理员正是出于这个理由而使用它。
它不是惯例的地方
JavaScript 和 Java
这些语言偏好变量和函数用 camelCase,类用 PascalCase。来自 Python 脚本的名字,在出现于 JavaScript 文件之前可能需要转换。为此请看 camelCase。
CSS 和网址
CSS 类名和网址通常使用连字符,而不是下划线。做这件事的工具是 kebab-case。搜索引擎把连字符当作单词分隔符,把下划线当作连接符,这个小小的差别是使用带连字符地址这一习惯背后的原因。
散文和标题
snake_case 用于名字,不用于阅读。用它写的标题或句子很伤眼睛。对于人类阅读的文本,保留单词和空格,对于标题可以考虑 Title Case。
如何在这里把文本转成 snake_case
粘贴或输入你的文本
在第一个字段中输入短语。结果立刻出现在第二个字段中,所以你可以在输入时看着它变化。
检查切口
看看单词在哪里被分开。像 iPhone 或 eBay 这样的词在大写处被切开,而像 HTTPServer 这样的首字母缩写需要看一眼,确认它出来的结果符合你的本意。
复制它
按下复制按钮,把结果粘贴到你需要的地方。关于同一行的其他形式,请看下文。
在整个项目中使用 snake_case
整个技术栈一种惯例
混用命名风格的项目,比略显丑陋但一致的项目更难阅读。如果数据库使用 snake_case,与它交谈的代码往往也是,在两者之间流动的文件也随之如此。当你为新的列或新的字段把文本转成 snake_case 时,你是在选择其他每一层都必须与之共存的名字,所以请选一次并贯彻到底。
在惯例之间迁移名字
迟早,一种惯例中的名字必须出现在另一种里。数据库列 customer_first_name 在 JavaScript 对象里变成 customerFirstName,在 CSS 类或网址里变成 customer-first-name。与其逐个手动重新输入,不如把原名粘贴到生成你所需形式的页面:给 C 系和 JavaScript 系代码用的 camelCase,给样式和地址用的 kebab-case。同一个名字的三种形式是彼此的精确翻译,转换器能一致地生成它们。
配置文件
设置文件常使用 snake_case 键,尤其是许多工具使用的 YAML。当你从以 JSON 保存的数据准备这样的文件时,JSON 转 YAML 让键保持你所写的样子,而 YAML 转 JSON 则做相反的事。在开始之前就确定键使用 snake_case,格式之间的转换就不会扰乱它们。
批量重命名
如果你继承了一个表头是各种风格混杂的数据文件,用本页转换每个表头,并一次性替换它们。先用小样本测试,因为如果只有部分地方的名字改变了,按表头读取该文件的脚本就会出错。在文件旁边保留一份新旧名字的清单,让同事能看到改了什么。
写出经久耐用的名字
说明这东西是什么,而不是怎样存储的
好名字描述内容。order_total 说明了这个数字的意思;col7 则没有。当你把文本转成 snake_case 时,确保你起步的短语是你能写出的最清楚的那个,因为转换器会忠实地保留它的清晰或它的含糊。
避免只有你自己懂的缩写
像 cust_fn_dt 这样的名字,对其他任何人是个谜,对六个月后的你也是。下划线很便宜,多加几个词也很便宜。读起来像一个句子的较长名字,比需要图例的简短名字是送给下一个人的更好的礼物。
保持单复数一致
决定表名用单数 customer,还是复数 customers,并坚持下去。惯例本身没有它的统一性重要。变成 snake_case 的短语保留你给它的单复数。
有帮助时加前缀
在大型数据库模式中,一个简短的前缀把相关的名字归在一起:billing_address、billing_city、billing_country。输入带前缀的短语并转换,能得到一致的结果,然后按字母顺序的列表会自行分组。
在承诺使用之前测试这些名字
在名字进入数据库模式或 API 之前,在它将出现的地方试一试:一个查询、一个变量、一个文件列表。如果它在这三处读起来都自然,它就能胜任。如果觉得别扭,就缩短或改写短语,再次把文本转成 snake_case。开头一分钟的测试,能省去以后跨数百个文件的重命名。
同一行的全部七种写法
一张形式表
在转换器下方,一张表以本站提供的全部七种形式显示示例行:大写、小写、Title Case、snake_case、kebab-case、camelCase 和 URL slug。这是看清同样的词在每种形式中是什么样子的快速办法。
这些形式从何而来
两套字母表
大写字母和小写字母曾经是两套不同的字母表。大写字母是罗马式的,用凿子刻在石头上;小写字母源自加洛林小写体,由笔在羊皮纸上快速移动而成形。印刷工人把两者放在不同的字盘里,上盒和下盒,字盘早已不在,这些名称却保留了下来。
没有空格的名字
编程的形式要年轻得多,它们是为解决一个问题而发明的:名字里不能包含空格。snake_case 来自早期的 C,camelCase 来自 Smalltalk,kebab-case 来自 Lisp,而 URL slug 来自把人类的标题放进不允许空格和重音符号的地址的需要。下划线是当时键盘上方便的字符,而且它看起来像一个坐在线上的空格。
把文本转成 snake_case 时的陷阱
用数字开头一个名字
大多数语言和数据库拒绝以数字开头的名字。如果短语以数字开头,请在前面加一个字母或一个单词。
指望保留字会被处理
像 class 或 order 这样的短语,在你的语言或 SQL 中可能是保留字。本页不知道,你必须检查。
首字母缩写
camelCase 名字里的首字母缩写,例如 parseHTMLString,取决于规则,可能被切成 parse_h_t_m_l_string 或 parse_html_string。请检查结果是不是你想要的。
很长的名字
数据库和文件系统有长度限制。变成名字的长短语可能会撞上它。转换之前先缩短措辞。
人们在转换前问的问题
标点会怎样?
它被当作单词之间的边界,不会被带过去。
数字会保留吗?
会,作为独立的单词,用下划线隔开。
它能处理 camelCase 的输入吗?
能。词内的大写字母标记一个切口,所以 fooBar 变成 foo_bar。
我可以用于其他语言吗?
可以,采用本页语言的规则。不带空格的文字,例如中文和日文,会作为单个单词回来。
我的文本会被上传吗?
不会。你在这里输入的内容从不发送到任何地方,所以草稿、密码或客户的姓名在这里和在文本编辑器里一样安全。
我如何改成得到连字符?
一个实例
假设你在为一家图书馆建一个小数据库,工作人员把他们电子表格的列标题发给了你:Book Title、Author's Last Name、Year Published (YYYY)、ISBN-13。你依次转换每一个,读到 book_title、author_s_last_name、year_published_yyyy 和 isbn_13。撇号让作者那一列变得不整洁,所以你把原文缩短为 Author Last Name 并再次转换:author_last_name。年份那一列去掉格式说明会更清楚,所以你保留 year_published。四个整齐的列名,一分钟写成,每一个都是数据库会接受的名字。
一份简短的清单
转换之前
用平实的词写下短语,不要带括号里的备注。检查目标是否接受下划线和重音。
转换时
粘贴短语,查看切口,并确保名字以字母开头。
转换之后
检查长度,对照保留字检查,并保留原始短语的记录,以便这个名字可以追溯到它的含义。
常见错误
对人们要阅读的文本使用 snake_case
它是用于名字的,不是用于散文的。
忘了目标允许什么
开头的数字、重音和长度限制在不同系统之间各不相同。
不看就转换首字母缩写
请检查它们周围的切口。
你的文本留在你的设备上
转换在本地进行。你的文本由你自己的浏览器处理,没有任何内容被发送到任何地方。事后没有什么要删除的,也没有账户要创建。这就是把文本转成 snake_case 的朴素方式。
小结
要在这里把文本转成 snake_case,粘贴一行,读到它的结果:单词被切开、转为小写并用下划线连接。已经写成 camelCase 的一行也会在那里被切开,所以 fooBar 变成 foo_bar。本页不保留标点:逗号、句点和破折号是单词之间的边界,而不是要带过去的字符,这正是文件名或数据库列所需要的,却不是散文所需要的。切分成单词需要边界,所以不带空格书写的中文和日文会作为单个单词回来。转小写遵循本页的语言。没有任何内容被上传。