使用方法
- 在「待转换内容」里粘贴或输入文本,每行一个标识符。页面打开时已经填好三行示例(hello_world、HTTPResponse、2fa setup),可以直接改。
- 如果需要,再填「额外分隔符」:有些代码库用
+或|连接单词,把它们填进这一格,就会被当成空格一样的分隔符处理;留空表示只认空格、下划线、连字符与点号。 - 点「转换为 PascalCase」,或在「额外分隔符」输入框里直接按 Enter 键。多行文本请用 Ctrl(macOS 为 Cmd)+ Enter 触发,单独按 Enter 仍然是换行。
- 结果区逐行给出转换后的标识符,行数与输入一一对应;空白行会原样保留为空行。
- 「转换结果」文本框只读,点「复制结果」可整段复制;下方对照表列出 28 组输入与输出的对应关系,点「复制对照表」得到制表符分隔的文本,点「导出 CSV」得到带 UTF-8 BOM 的表格文件。
- 表格默认先显示 12 行,点「加载更多」补齐其余,便于逐条核对边界情况。
这个 Pascal 命名转换能解决什么问题
同一个概念在不同语言与不同团队里会写成不同样子:Python 与数据库习惯 user_profile_image,CSS 习惯 user-profile-image,Java 与 C# 的类名要求 UserProfileImage,JavaScript 的变量常用 userProfileImage。手工逐字改大小写既慢又容易漏——尤其是 HTTPResponse 这类连续大写缩写,人手下意识会写成 HTTPResponse 而语言规范要求 HttpResponse。这个 Pascal 命名转换把「拆词」与「拼词」两件事分开做:先无条件把输入拆成词序列,再按 Pascal 规则重新拼接,所以无论输入是哪种写法,输出都只有一种形式。
先把名称对齐:站内沿用的写法是「Pascal命名转换」,规范术语就叫 PascalCase,中文也称大驼峰命名或首字母大写拼接。
它适合把数据库字段名批量转成实体类属性名、把 kebab-case 的 CSS 类名转成 React 组件名、把用户填写的英文标题转成合法标识符,也适合在写接口文档时统一字段命名。页面不修改你的原始输入,只输出转换结果,所以可以先对照一遍再决定要不要采用。需要说明的是,国内 UI 文案里的中文按钮、标题不应该套用 Pascal 命名——中文没有大小写,硬套只会得到一串没有可读性收益的字母串。
计算原理与变量说明
转换规则分四步,顺序固定:
- 第一步,按分隔符切词。空格、下划线
_、连字符-、点号.都视为词边界,连续多个分隔符只算一次;这一步把user_profile_image、user-profile-image、user.profile.image三种写法归一到同一个词序列。 - 第二步,按边界二次拆分。四条规则依次施加:小写或数字后接大写
([a-z0-9])([A-Z])拆一刀;连续大写后接「大写 + 小写」([A-Z]+)([A-Z][a-z])拆一刀;字母后接数字([A-Za-z])([0-9])与数字后接字母([0-9])([A-Za-z])各拆一刀。四条规则循环施加直到字符串不再变化,这样嵌套的大写串(如xmlHTTPRequest)也能被拆干净。 - 第三步,归一化每个词。每个词先整体转小写,再把首字符转大写,其余不变。这一步是「HTTP → Http」「OAuth → OAuth」的关键:前者因为整体转小写再首字母大写而收敛成 Http,后者因为内部含小写字母、根本没有被第二步拆开,所以转小写后仍是 oauth、首字母大写后回到 OAuth。
- 第四步,顺序拼接。所有词按原顺序直接相连,不插任何分隔符;输入为空串时直接返回空串。
最容易产生歧义的是连续大写的切法。HTTPResponse 理论上至少有三种合理切分:H + TTPResponse、HTTP + Response、HTTPR + esponse。本页采用业界通行的「大写 + 小写」切法,即把最后一个大写字母划给后面的词,得到 HTTP + Response,输出 HttpResponse;这正好匹配 .NET 与 Java 官方命名指南对缩写词的要求(连续缩写词按普通单词处理,只保留首字母大写)。如果换成「逐字母切」的规则,HTTP 会被拆成四个单词,输出变成 HtTpResponse,显然不可用。
第二个机制是含小写的缩写不会被拆。OAuth2TokenRefresh 里的 OAuth 是「大写 O + 小写 Auth」,规则 ([A-Z]+)([A-Z][a-z]) 要求前半段至少一个大写、后半段是「大写 + 小写」,它在这里找不到匹配点,于是 OAuth 作为一个整体进入第三步,转小写得 oauth、首字母大写回到 OAuth,最终 OAuth2TokenRefresh 原样输出——这不是没生效,而是规则对这类混合大小写缩写的正确行为。
第三个机制是数字边界的处理。字母与数字之间一定会被拆开,所以 user2name 会先拆成 user、2、name 三段,再拼成 User2Name;但纯数字 123 不会被拆,转小写后首字符仍是数字,「首字母大写」对数字没有作用,输出依旧是 123。
完整示例(数值仅作演示)
示例条件:默认输入为三行文本 hello_world、HTTPResponse、2fa setup,额外分隔符留空。逐行转换后得到 HelloWorld、HttpResponse、2FaSetup;其中第三行以数字开头,页面会把它标成不合法标识符。下表列出全部 24 组示例,字符数一列表示「输入长度 → 输出长度」。
| 输入 | PascalCase 输出 | 字符数 | 说明 |
|---|---|---|---|
hello world | HelloWorld | 11 → 10 | 空格分隔 |
hello_world | HelloWorld | 11 → 10 | 下划线分隔 |
hello-world | HelloWorld | 11 → 10 | 连字符分隔 |
helloWorld | HelloWorld | 10 → 10 | camelCase 小写开头,在大写边界处拆开 |
HelloWorld | HelloWorld | 10 → 10 | 已经是 PascalCase |
HELLO_WORLD | HelloWorld | 11 → 10 | 全大写 + 下划线,先整体转小写再首字母大写 |
hello.world | HelloWorld | 11 → 10 | 点号分隔,常见于包名与配置键 |
userID | UserId | 6 → 6 | 尾部连续大写缩写被拆开 |
HTTPResponse | HttpResponse | 12 → 12 | 连续大写按「大写 + 小写」切 |
JSON_to_XML | JsonToXml | 11 → 9 | 大写缩写与下划线混用 |
" multiple spaces " | MultipleSpaces | 21 → 14 | 引号仅为示意,连续空格与首尾空格全部折叠 |
v2_api_client | V2ApiClient | 13 → 11 | 字母与数字边界处拆开 |
getUserByID | GetUserById | 11 → 11 | 动词短语,两处缩写被归一化 |
OAuth2TokenRefresh | OAuth2TokenRefresh | 18 → 18 | 含小写的缩写 OAuth 不被拆分 |
ID | Id | 2 → 2 | 两位缩写 |
URL | Url | 3 → 3 | 三位缩写 |
a | A | 1 → 1 | 单字母小写 |
A | A | 1 → 1 | 单字母大写 |
123 | 123 | 3 → 3 | 纯数字,首字母大写对数字无效 |
user2name | User2Name | 9 → 9 | 数字两侧各拆一刀 |
my-var_2 | MyVar2 | 8 → 6 | 混合分隔符 |
| (空) | (空) | 0 → 0 | 空输入返回空串 |
" " | (空) | 3 → 0 | 纯分隔符,拆完没有词 |
alreadyPascalCase | AlreadyPascalCase | 17 → 17 | 已是小写开头驼峰,首字母补大写 |
示例中的输入内容均为演示取值,用来覆盖各种分隔符与边界写法,不代表任何具体项目的命名规范。
六种命名风格对照表
同一组词 user profile image 在六种常见命名风格下的写法如下。本页输出的是第一行 PascalCase;如果需要其它风格,可以先用本页转换成 PascalCase,再把词边界补回对应分隔符。
| 命名风格 | 结果 | 单词边界与大小写 |
|---|---|---|
| PascalCase | UserProfileImage | 无分隔符,每个词首字母大写 |
| camelCase | userProfileImage | 无分隔符,首词小写、其后首字母大写 |
| snake_case | user_profile_image | 下划线连接,全部小写 |
| SCREAMING_SNAKE | USER_PROFILE_IMAGE | 下划线连接,全部大写 |
| kebab-case | user-profile-image | 连字符连接,全部小写 |
| dot.case | user.profile.image | 点号连接,全部小写 |
下表把十二种输入写法统一转换成 PascalCase,用于核对「不同写法是否收敛到同一结果」。
| 输入 | PascalCase | 校验 |
|---|---|---|
user profile image | UserProfileImage | ✓ |
user_profile_image | UserProfileImage | ✓ |
user-profile-image | UserProfileImage | ✓ |
userProfileImage | UserProfileImage | ✓ |
USER_PROFILE_IMAGE | UserProfileImage | ✓ |
user.profile.image | UserProfileImage | ✓ |
User Profile Image | UserProfileImage | ✓ |
userProfileIMAGE | UserProfileImage | ✓ |
xmlHTTPRequest | XmlHttpRequest | ✓ |
getURLFromID | GetUrlFromId | ✓ |
Customer2Address | Customer2Address | ✓ |
_private_var_ | PrivateVar | ✓ |
结果边界、舍入与适用说明
- 空输入返回空串,纯分隔符(例如三个空格或一串下划线)同样返回空串,页面会把它标成「去掉分隔符后为空」而不是报错。
- 含重音字母的词按原字符保留:
café menu得到CaféMenu,本页不做去音标处理,因为 ét 与 e 在部分语言里是不同的标识符字符。 - 含中文的词原样保留、不做大小写转换:
用户 名称得到用户名称。中文没有大小写,首字符大写规则对汉字无效。 - 缩写连写的边界:
HTTPSConnection得到HttpsConnection,因为连续大写按「大写 + 小写」切开后,前半段HTTPS转小写再首字母大写变成Https。 - 数字开头的结果不合法:
2fa setup按规则得到2FaSetup,但 Pascal 命名要求首字符是字母,以数字开头的标识符在 C#、Java、Go 的变量与类型名里都不被接受。页面会在结果区给出这条提示,看到提示请在前面补一个语义前缀,例如改成TwoFaSetup或TotpSetup。 - 本页逐行处理,行与行之间不互相影响;空行保留为空行,所以输出的行号与输入严格对应,方便把结果贴回原文件。
- 转换只涉及大小写与分隔符,不校验保留字。如果结果恰好是
Class、Public这类语言关键字,需要自行加前缀或后缀规避。
常见问题
Pascal 命名和驼峰命名(camelCase)到底有什么区别?
区别只在首字母:PascalCase 每个词都首字母大写,包括第一个词,所以写成 UserProfileImage;camelCase 的第一个词保持小写,写成 userProfileImage。两者拆词与拼接规则完全相同,所以本页先转 Pascal 再补一步「首字母改小写」就能得到 camelCase。C#、Java 用 Pascal 命名类型与方法,JavaScript、Java 用 camel 命名变量与方法。
为什么 HTTPResponse 会变成 HttpResponse?
因为连续大写缩写在第二步被按「大写 + 小写」切开,拆成 HTTP 与 Response 两个词,第三步再把每个词整体转小写、首字母大写,HTTP 就收敛成了 Http。这样处理符合 .NET 与 Java 的命名指南:缩写词按普通单词对待,只保留首字母大写,所以 ID 得到 Id、URL 得到 Url。
OAuth2TokenRefresh 为什么原样不变?
因为 OAuth 是「大写 O + 小写 Auth」的混合写法,拆分规则要求大写段之后紧跟「大写 + 小写」,OAuth 里找不到这样的切点,于是它整体进入归一化:转小写得 oauth,首字母大写又回到 OAuth。同理 Token、Refresh 也都得到相同结果,所以整串原样输出。这说明规则没有失效,只是这类缩写本就不该被拆。
2fa setup 转出来是 2FaSetup,能直接当变量名用吗?
不能。Pascal 命名要求首字符是字母,数字开头的标识符在 C#、Java、Go 里都不是合法名称,页面会在结果区给出提示。建议在前面补一个语义前缀,例如 TwoFaSetup、TotpSetup 或 Verify2FaSetup,把数字挪到中间或末尾。
中文和带重音的字母会怎么处理?
原样保留、只做大小写归一化。中文没有大小写,所以「用户 名称」得到「用户名称」;é 这类重音字母不会被转成 e,因为它们在不少语言里是不同字符,强行去音标可能改变标识符含义。唯一例外是字母与数字的边界仍会被拆开,例如「版本2」不会触发拆分,因为汉字不在字母数字集合里。
点号被当成分隔符,会不会误伤小数点?
会有影响,需要注意。本页把点号视为词边界,所以 1.5 会被拆成 1 与 5,再拼成 15。如果你的输入包含小数、版本号(如 1.2.3)或 IP 地址,请先把这些片段单独处理,或先用「额外分隔符」之外的方式避开——因为额外分隔符只能增加分隔符,无法取消点号这一默认分隔符。
这个工具免费吗?
免费,无需注册即可使用。
输入的数据安全吗?
安全。计算在当前浏览器本地完成,不会上传输入内容。
相关工具
- 驼峰大小写转换器:camelCase 方向的转换,首词小写。
- 短横线大小写转换器:kebab-case,常用于 CSS 类名与 URL。
- snake 大小写转换器:下划线风格,常用于数据库字段与常量。
- 句子大小写转换器:只把句首字母大写的自然语言写法。
- 英文标题大小写转换:英文标题的词首大写规则。