文本工具 · 大小写 / 全角半角

大小写转换

全大/全小/首字母/句首/驼峰/蛇形/短横

本地处理 · 不上传 免费 · 无需登录 无次数限制 累计 48 次使用
输入文本,选转换类型,输出实时刷新
原文输入 input
就绪 · 等待输入
转换输出 output
UPPER CASE 全部大写
基础大小写basic case
命名风格naming convention
就绪 · 纯本地实时转换,文本不上传、不入 URL
第一节

关于本工具

About

一份英文文档里,标题全大写,正文句首大写,变量名用驼峰——手动改一遍,眼睛累、手更累。把文本粘贴进来,选一种转换规则(全大写、全小写、首字母大写、句首大写、驼峰式、蛇形式、短横式),结果即时预览。所有处理在浏览器本地完成,文字不会被上传到任何服务器。

使用场景

API 字段名统一

后端返回的字段是 snake_case(user_name),前端团队用的却是 camelCase(userName)。联调时因为命名不一致,接口对接反复报错。用本工具将整段 JSON 的 key 批量转为驼峰,前后端各拿一份对照表,半小时的对齐工作压缩到 5 分钟,且不会漏改某个深层嵌套字段。

数据库导入格式清洗

从 Excel 导出的用户名单里,姓名列全是全大写(ZHANG SAN),但公司 CRM 系统要求首字母大写(Zhang San)。手动改 3000 条记录至少半天,还容易漏改中间名。把整列粘贴进工具,选「首字母大写」模式,3 秒出结果,直接覆盖原列导入,零遗漏。

Git 提交信息规范化

团队 Git 提交信息风格不统一:有人写全小写(fix bug),有人写句首大写(Fix bug),还有人写驼峰(fixBug)。Code Review 时每次都要口头提醒。把最近 20 条 commit message 粘贴进工具,统一转为「句首大写」格式,再复制回终端批量 amend,后续 CI 检查规则也按这个标准写。

论文参考文献格式转换

参考文献管理软件导出的条目全是全大写(AUTHOR, T.),但目标期刊要求首字母大写(Author, T.)。手动改 80 条参考文献,每条标题里还有大小写混用的专有名词。用本工具先统一转为首字母大写,再手动修正少数专有名词(如 RNA),比逐条重敲节省了 40 分钟。

爬虫数据字段去重

爬取电商商品列表时,同一个 SKU 在不同页面出现「Nike Air Max」和「NIKE AIR MAX」两种写法,导致去重失败。把 5000 条标题全转为小写后做哈希去重,再转回原始格式保留展示。本工具支持批量处理,不用写 Python 脚本,非技术运营也能直接操作。

变量命名风格迁移

接手一个老项目,代码里变量名全是蛇形(user_list),但新团队规范要求短横线(user-list)用于 CSS 类名。全局搜索替换容易误伤注释里的内容。用本工具把变量定义行单独抽出来转换,再对照结果手动替换,比写正则表达式快且不出错。

对比矩阵

维度本工具竞品 A(在线转换站)传统方法(手动操作)
转换类型全大/全小/首字母/句首/驼峰/蛇形/短横共 7 种通常只支持全大/全小/首字母大写 3 种只能靠肉眼逐个修改,或手动输入公式/替换
隐私纯浏览器处理,文本不上传服务器文本需粘贴到网页后上传至服务端处理完全本地,但需自行编辑文件
速度毫秒级实时转换,输入即出结果依赖网络延迟,通常 1-3 秒取决于文本长度和手动操作熟练度,分钟级
批量处理支持单次粘贴任意长度文本,一次性转换部分站点限制单次 5000 字符,长文本需分段无法批量,只能逐字或逐行修改
离线可用完全离线,浏览器打开后断网仍可用必须联网,断网无法使用无需网络,但依赖本地编辑器
费用免费,无隐藏收费部分站点免费但含广告,高级功能需付费会员免费,但需自行投入时间成本
第二节

使用指南

Getting Started

使用步骤

  1. 1在输入框粘贴或键入待转换文本,右侧预览区同步显示原内容,无字符数上限
  2. 2点击「全大写」「首字母大写」「驼峰式」等任一转换模式,结果区即时更新,无需提交按钮
  3. 3点结果区任意段落旁的复制图标,该段文本自动写入剪贴板,页面顶部弹出「已复制」提示
  4. 4切换模式时,输入框内容保留不变,可多次尝试不同转换结果对比差异

输入输出示例

输入输出说明
hello worldHELLO WORLD常规:全大写转换,验证基本空格和字母处理
hello worldHello World常规:首字母大写(每个单词首字母大写),验证空格分隔单词的处理
hello worldhelloWorld常规:驼峰式转换,验证空格去除及首单词小写、后续单词首字母大写的规则
hello worldhello_world常规:蛇形式转换,验证空格替换为下划线且全部小写
hello worldhello-world常规:短横式转换,验证空格替换为短横且全部小写
HELLO WORLDhello world边界:全大写输入转全小写,验证大写字母到小写的正确映射
hello worldHello world边界:句首大写(仅首单词首字母大写),验证只改变第一个单词的首字母,其余保持原样
123abc!@#123ABC!@#易错:含数字和特殊字符,验证非字母字符是否被忽略或保留原样(全大写转换)

常见错误对照

1.首字母大写误用于全大写单词

✗ 错误输入 "APPLE",选首字母大写,期望 "APPLE" 不变
✓ 修复输入 "apple",选首字母大写,得到 "Apple"

首字母大写只将每个单词的首字母转为大写、其余保持原样。全大写字符串中的非首字母不会自动小写,结果仍是 "APPLE"。

2.句首大写误以为会处理句号后的单词

✗ 错误输入 "hello.world",选句首大写,期望得到 "Hello.World"
✓ 修复输入 "hello world",选句首大写,得到 "Hello world"

句首大写仅将字符串的第一个字母转为大写,不识别句号、换行等分隔符后的单词。后续单词需手动处理或配合其他转换。

3.驼峰转换时混淆了大小驼峰

✗ 错误输入 "get user id",选驼峰,期望 "getUserId",实际得到 "GetUserId"
✓ 修复输入 "get user id",选驼峰,得到 "GetUserId"(大驼峰);若需小驼峰,应选首字母小写后再转

本工具驼峰默认输出大驼峰(PascalCase),首字母大写。小驼峰(camelCase)需先转全小写再手动首字母小写,或工具若提供选项则选小驼峰。

4.蛇形转换时误保留原有分隔符

✗ 错误输入 "user_name",选蛇形,期望 "user_name" 不变,实际得到 "user_name"(正确)但若输入 "user-name" 则得到 "user_name"
✓ 修复输入 "user-name",选蛇形,得到 "user_name"

蛇形转换将空格、连字符、下划线等分隔符统一替换为下划线。若输入已含下划线,结果不变;若输入含其他分隔符,会被替换。

5.短横转换时忽略数字与字母混合

✗ 错误输入 "CSS3Property",选短横,期望 "css3-property",实际得到 "css-3-property"
✓ 修复输入 "CSS3Property",选短横,得到 "css3-property"

短横转换(kebab-case)通常只在字母大小写边界或单词分隔处插入连字符。数字与字母之间是否插入连字符取决于实现,本工具在数字与字母交界处不插入连字符。

6.全小写转换后误以为会保留专有名词大小写

✗ 错误输入 "iPhone",选全小写,期望 "iPhone" 不变
✓ 修复输入 "iPhone",选全小写,得到 "iphone"

全小写转换无条件将所有字母转为小写,不识别专有名词、品牌名等。如需保留特定大写,需手动调整。

第三节

工作原理

How It Works

核心公式

SnakeCase = 原字符串.replace(/[A-Z]/g, '_$&').replace(/[\s-]+/g, '_').replace(/^_/, '').toLowerCase()

变量说明

  • 原字符串待转换的原始文本
  • SnakeCase转换后的蛇形命名结果

示例

原字符串 'HelloWorld 2024':先在大写字母前加下划线得 '_Hello_World 2024',再将空格替换为下划线得 '_Hello_World_2024',去掉首下划线得 'Hello_World_2024',最后全小写得 'hello_world_2024'。

输入原文选择转换模式(全大/全小/首字母/…)本地字符遍历(Unicode 逐字处理)输出结果驼峰/蛇形/短横需拆分单词再拼接句首/首字母需识别边界字符
用户输入 本地处理 输出结果 特殊规则
第四节

开发者集成

For Developers

5 种主流语言实现,复制即用:

import re def to_upper(s: str) -> str: return s.upper() def to_lower(s: str) -> str: return s.lower() def capitalize_words(s: str) -> str: return s.title() def capitalize_sentence(s: str) -> str: return s.capitalize() def to_camel(s: str) -> str: words = re.split(r'[\s_\-]+', s) return words[0].lower() + ''.join(w.capitalize() for w in words[1:]) def to_snake(s: str) -> str: s = re.sub(r'([A-Z])', r'_\1', s).lower() return re.sub(r'[\s\-]+', '_', s).strip('_') def to_kebab(s: str) -> str: s = re.sub(r'([A-Z])', r'-\1', s).lower() return re.sub(r'[\s_]+', '-', s).strip('-') # 示例 print(to_upper('hello world')) # HELLO WORLD print(to_lower('HELLO WORLD')) # hello world print(capitalize_words('hello world')) # Hello World print(capitalize_sentence('hello WORLD')) # Hello world print(to_camel('hello-world_example')) # helloWorldExample print(to_snake('helloWorldExample')) # hello_world_example print(to_kebab('hello_world_example')) # hello-world-example
function toUpper(s) { return s.toUpperCase(); } function toLower(s) { return s.toLowerCase(); } function capitalizeWords(s) { return s.replace(/\b\w/g, c => c.toUpperCase()); } function capitalizeSentence(s) { return s.charAt(0).toUpperCase() + s.slice(1).toLowerCase(); } function toCamel(s) { const words = s.split(/[\s_\-]+/); return words[0].toLowerCase() + words.slice(1).map(w => w.charAt(0).toUpperCase() + w.slice(1).toLowerCase()).join(''); } function toSnake(s) { return s.replace(/([A-Z])/g, '_$1').toLowerCase().replace(/[\s\-]+/g, '_').replace(/^_/, ''); } function toKebab(s) { return s.replace(/([A-Z])/g, '-$1').toLowerCase().replace(/[\s_]+/g, '-').replace(/^-/, ''); } // 示例 console.log(toUpper('hello world')); // HELLO WORLD console.log(toLower('HELLO WORLD')); // hello world console.log(capitalizeWords('hello world')); // Hello World console.log(capitalizeSentence('hello WORLD')); // Hello world console.log(toCamel('hello-world_example')); // helloWorldExample console.log(toSnake('helloWorldExample')); // hello_world_example console.log(toKebab('hello_world_example')); // hello-world-example
package main import ( "fmt" "regexp" "strings" "unicode" ) func toUpper(s string) string { return strings.ToUpper(s) } func toLower(s string) string { return strings.ToLower(s) } func capitalizeWords(s string) string { return strings.Title(s) } func capitalizeSentence(s string) string { r := []rune(s) if len(r) == 0 { return s } r[0] = unicode.ToUpper(r[0]) for i := 1; i < len(r); i++ { r[i] = unicode.ToLower(r[i]) } return string(r) } func toCamel(s string) string { re := regexp.MustCompile(`[\s_\-]+`) words := re.Split(s, -1) for i := 1; i < len(words); i++ { words[i] = strings.Title(words[i]) } return words[0] + strings.Join(words[1:], "") } func toSnake(s string) string { re := regexp.MustCompile(`([A-Z])`) s = re.ReplaceAllString(s, "_$1") s = strings.ToLower(s) re = regexp.MustCompile(`[\s\-]+`) return strings.Trim(re.ReplaceAllString(s, "_"), "_") } func toKebab(s string) string { re := regexp.MustCompile(`([A-Z])`) s = re.ReplaceAllString(s, "-$1") s = strings.ToLower(s) re = regexp.MustCompile(`[\s_]+`) return strings.Trim(re.ReplaceAllString(s, "-"), "-") } func main() { fmt.Println(toUpper("hello world")) // HELLO WORLD fmt.Println(toLower("HELLO WORLD")) // hello world fmt.Println(capitalizeWords("hello world")) // Hello World fmt.Println(capitalizeSentence("hello WORLD")) // Hello world fmt.Println(toCamel("hello-world_example")) // helloWorldExample fmt.Println(toSnake("helloWorldExample")) // hello_world_example fmt.Println(toKebab("hello_world_example")) // hello-world-example }
function toUpper(s: string): string { return s.toUpperCase(); } function toLower(s: string): string { return s.toLowerCase(); } function capitalizeWords(s: string): string { return s.replace(/\b\w/g, c => c.toUpperCase()); } function capitalizeSentence(s: string): string { return s.charAt(0).toUpperCase() + s.slice(1).toLowerCase(); } function toCamel(s: string): string { const words = s.split(/[\s_\-]+/); return words[0].toLowerCase() + words.slice(1).map(w => w.charAt(0).toUpperCase() + w.slice(1).toLowerCase()).join(''); } function toSnake(s: string): string { return s.replace(/([A-Z])/g, '_$1').toLowerCase().replace(/[\s\-]+/g, '_').replace(/^_/, ''); } function toKebab(s: string): string { return s.replace(/([A-Z])/g, '-$1').toLowerCase().replace(/[\s_]+/g, '-').replace(/^-/, ''); } // 示例 console.log(toUpper('hello world')); // HELLO WORLD console.log(toLower('HELLO WORLD')); // hello world console.log(capitalizeWords('hello world')); // Hello World console.log(capitalizeSentence('hello WORLD')); // Hello world console.log(toCamel('hello-world_example')); // helloWorldExample console.log(toSnake('helloWorldExample')); // hello_world_example console.log(toKebab('hello_world_example')); // hello-world-example
fn to_upper(s: &str) -> String { s.to_uppercase() } fn to_lower(s: &str) -> String { s.to_lowercase() } fn capitalize_words(s: &str) -> String { s.split_whitespace() .map(|w| { let mut c = w.chars(); match c.next() { None => String::new(), Some(f) => f.to_uppercase().collect::<String>() + c.as_str(), } }) .collect::<Vec<_>>() .join(" ") } fn capitalize_sentence(s: &str) -> String { let mut chars = s.chars(); match chars.next() { None => String::new(), Some(f) => f.to_uppercase().collect::<String>() + &chars.as_str().to_lowercase(), } } fn to_camel(s: &str) -> String { s.split(|c: char| c.is_whitespace() || c == '_' || c == '-') .enumerate() .map(|(i, w)| { if i == 0 { w.to_lowercase() } else { let mut c = w.chars(); match c.next() { None => String::new(), Some(f) => f.to_uppercase().collect::<String>() + c.as_str(), } } }) .collect() } fn to_snake(s: &str) -> String { let mut result = String::new(); for (i, c) in s.chars().enumerate() { if c.is_uppercase() { if i != 0 { result.push('_'); } result.extend(c.to_lowercase()); } else if c.is_whitespace() || c == '-' { result.push('_'); } else { result.push(c); } } result.trim_matches('_').to_string() } fn to_kebab(s: &str) -> String { let mut result = String::new(); for (i, c) in s.chars().enumerate() { if c.is_uppercase() { if i != 0 { result.push('-'); } result.extend(c.to_lowercase()); } else if c.is_whitespace() || c == '_' { result.push('-'); } else { result.push(c); } } result.trim_matches('-').to_string() } fn main() { println!("{}", to_upper("hello world")); // HELLO WORLD println!("{}", to_lower("HELLO WORLD")); // hello world println!("{}", capitalize_words("hello world")); // Hello World println!("{}", capitalize_sentence("hello WORLD")); // Hello world println!("{}", to_camel("hello-world_example")); // helloWorldExample println!("{}", to_snake("helloWorldExample")); // hello_world_example println!("{}", to_kebab("hello_world_example")); // hello-world-example }
第五节

常见问题

Q & A
我有一段 Python 变量名 user_name,想转成驼峰 UserName,选哪个模式?

选「首字母大写」模式。驼峰(CamelCase)在编程里有两种:小驼峰(userName,首字母小写)和大驼峰(UserName,首字母大写)。本工具的「首字母大写」是把每个单词首字母转大写、其余小写,结果就是大驼峰。如果你需要小驼峰(首单词首字母小写),目前没有直接模式,可以先全转小写再用首字母大写,然后把第一个字母手动改小写。

为什么我输入一段英文句子,选「句首大写」后,每个单词首字母都变大了?

「句首大写」只把句子的第一个单词首字母转大写,其他单词保持原样,不是每个单词都大写。如果你看到每个单词首字母都变大了,说明你误选了「首字母大写」模式。检查一下工具界面上的模式按钮:句首大写通常图标是一个句号加一个字母,首字母大写是 Aa 样式。

我的文本里有数字和特殊符号(比如 user_123_name),转蛇形或驼峰会怎么处理?

数字和特殊符号会被保留原样,不参与大小写转换。例如「user_123_name」选蛇形(snake_case)后变成「user_123_name」—— 下划线已经符合蛇形规则,数字不变。如果选驼峰,会变成「User123Name」,数字前后单词的首字母被转大写,但数字本身不动。唯一例外是「短横」模式:它会先去掉下划线再用短横连接,但数字仍保留。

我有一段数据库字段名 createdAt,想转成蛇形 created_at,但工具没有直接选项?

目前工具没有「驼峰转蛇形」的自动反向转换功能。你需要手动处理:先把「createdAt」拆成两个单词「created」和「At」,分别输入或用空格隔开,然后选「全小写」模式得到「created at」,再用「蛇形」模式(会自动把空格替换成下划线)得到「created_at」。或者更简单:选「全小写」后把结果中的空格手动改成下划线。

全大写和首字母大写混用的时候,这个工具会不会把我原本正确的大写字母变小?

会的,因为每种模式都会重新处理整个文本的大小写规则。例如你有一段代码注释「GetUserInfo」,想保留「Get」和「User」的大写,但如果选「全小写」会变成「getuserinfo」,所有大写都会丢失。建议先想好目标格式再一次性转换;如果只想改部分单词,可以分段处理,或者先用「全小写」打底,再手动把特定字母改回大写。

这个工具是纯前端处理吗?我的敏感文本会不会被上传到服务器?

是的,本工具完全在浏览器本地运行(FE 实现),输入文本不会离开你的设备。所有大小写转换逻辑由 JavaScript 在浏览器内存中执行,不经过任何后端服务器。关闭页面后数据自动清除,适合处理密码、API 密钥、内网配置等敏感内容。如果你发现页面加载慢或转换卡顿,通常是浏览器性能问题,不是数据传输问题。

我有一段 10 万字的英文小说,能一次性转换吗?会不会崩溃?

可以,但取决于浏览器内存。10 万英文字符大约 100KB,现代浏览器处理这个量级的大小写转换完全没问题,一般不会崩溃。不过如果文本包含大量特殊字符(如 HTML 标签、Unicode 符号),转换速度可能略慢。建议分批处理(比如每 5 万字一次),避免浏览器标签页卡死。如果遇到卡顿,先复制粘贴到记事本保存,再刷新页面重新处理。

蛇形和短横有什么区别?我写 CSS 类名该用哪个?

蛇形(snake_case)用下划线连接单词,例如「main_container」;短横(kebab-case)用连字符连接,例如「main-container」。CSS 类名推荐用短横(kebab-case),因为 CSS 语法本身使用连字符(如 background-color),且 HTML 中下划线可能被某些解析器特殊处理。蛇形更多用于 Python 变量名或数据库字段名。工具里选「短横」模式即可得到 CSS 规范格式。

隐私保证所有计算与处理均在你的浏览器本地完成,输入数据不会上传服务器,也不会保存或共享。

选择 打开 +新窗口 esc关闭