§

貼上文字

§

所有大小寫

text
  • camelCase
  • PascalCase
  • snake_case
  • CONSTANT_CASE
  • kebab-case
  • dot.case
  • path/case
  • Title Case
  • Sentence case
  • lower case
  • UPPER CASE

命名慣例折射出工程文化:中央研究院資訊所與臺大、清大、交大資工系的開源專案,以及趨勢科技、聯發科、工研院的內部 C++/Python 風格指南,皆嚴守 camelCase 與 snake_case 分工。iThome 鐵人賽連年有以「命名慣例」為題的系列文章,Cinnamon AI 與其他 AI 新創在 GitHub 提交時要求 PascalCase 類別、CONSTANT_CASE 常數,而前端工程師於 React 元件普遍採 PascalCase、於 Hook 採 camelCase。各家科技公司的 code review 機器人也會自動標記不符合風格指南的識別字,將大小寫一鍵轉換可省下大量手工。

什麼是文字大小寫轉換?

文字大小寫轉換接收一段輸入字串,並以另一種字母大小寫慣例輸出同樣的單字。最常見的目標是 camelCasePascalCase(多數大括號語言的識別字)、snake_caseCONSTANT_CASE(Python、Ruby、Rust、C 巨集)、kebab-case(URL、CSS 類別名、HTML 屬性、npm 套件名)、dot.case(設定檔鍵、JavaScript 物件路徑)、path/case(類檔案系統識別字)、Title CaseSentence case(標題與內文),以及完整的 lower caseUPPER CASE。此轉換器會偵測輸入中的自然單字邊界 — 空白、連字符、底線、點、斜線,以及標示 helloWorld 風格識別字的小寫到大寫轉換邊界 — 再以每種目標大小寫所需的分隔符與大寫樣式重新組合。

大小寫轉換如何運作?

你的輸入完全在瀏覽器內由一個小型的純 JavaScript 分詞器與十一個大小寫格式化器處理。高層步驟如下:

  1. 輸入按原樣從文字框讀取 — 你貼上的每個位元組都僅保存在本機記憶體中。
  2. 分詞器按空白、底線、連字符、點與斜線切分輸入,然後按小寫到大寫的邊界再次切分(因此 helloWorld 變為 ["hello", "World"]),並按字母與數字邊界切分(因此 v2API 變為 ["v", "2", "API"])。
  3. 空 token 被過濾掉,剩餘 token 以 String.prototype.toLocaleLowerCase 轉為小寫,以正確保留土耳其語、德語等地區設定中的 Unicode 字母。
  4. 接著十一個格式化器依序把 token 組裝為每種目標大小寫 — camelCase、PascalCase、snake_case、CONSTANT_CASE、kebab-case、dot.case、path/case、Title Case(帶一個小詞清單,讓 andtheof 等在非首尾時維持小寫)、Sentence case、完整小寫與完整大寫。
  5. 輸出在結果格上以每種大小寫一列寫入;每列都有自己的複製按鈕,使用非同步的 Clipboard API,並以同步的 document.execCommand('copy') 作為舊瀏覽器的後備方案。

為什麼使用大小寫轉換器?

  • 重構識別字:把 JavaScript 變數從 user_id 改名為 userId、把 Python 函式從 helloWorld 改為 hello_world,或把 Rust 常數從 maxBuffer 改為 MAX_BUFFER,不必一個字元一個字元地手動編輯。
  • 轉換設定檔鍵:把整份滿是 camelCase 鍵的 JSON 設定一次貼上,就翻成給 Python 服務用的 snake_case YAML,或給 Helm chart 用的 kebab-case。
  • 撰寫標題:貼上一份草稿標題,即可同時讀出 Title Case(帶 Chicago Manual of Style 的小詞例外)與 Sentence case(AP Stylebook)兩種形式 — 依你所屬刊物的風格選擇。
  • 產生 URL slug:貼上一篇部落格標題,把 kebab-case 形式直接複製到 CMS 的 slug 欄位 — 分詞器會處理標點符號與多字片語,不會留下多餘的分隔符。

大小寫轉換有哪些常見應用?

在字母大小寫慣例之間切換出現在軟體工程、內容撰寫與資料工程的各個面向:

  • 程式重構:風格指南改變時跨程式碼庫重新命名識別字(例如後端改寫時把 JavaScript camelCase 改為 Python snake_case),不引入錯字。
  • API 載荷重塑:把 camelCase 的 JSON 鍵轉為 snake_case 再餵給 Ruby on Rails 或 Django 後端,或轉為 kebab-case 用作 CSS-in-JS 類別名。
  • 撰寫標題與 slug:從同一份來源標題一次產生 Title Case 頁面標題、Sentence case 中繼描述,以及 kebab-case URL slug。

大小寫轉換範例長什麼樣子?

Hello World API 貼入輸入框。結果格同時渲染十一列:helloWorldApi(camelCase)、HelloWorldApi(PascalCase)、hello_world_api(snake_case)、HELLO_WORLD_API(CONSTANT_CASE)、hello-world-api(kebab-case)、hello.world.api(dot.case)、hello/world/api(path/case)、Hello World Api(Title Case)、Hello world api(Sentence case)、hello world api(lower case)與 HELLO WORLD API(UPPER CASE)。同樣的輸入若貼上為 helloWorldAPI,也會分詞成相同的三個字 — 小寫到大寫的邊界偵測器同樣能處理這種形式。

這是在我的瀏覽器中執行的嗎?

是。分詞器與十一個大小寫格式化器約 120 行純 JavaScript,執行於瀏覽器分頁內。沒有任何內容會被上傳,沒有 service worker 代理你的輸入,轉換步驟本身也不發出任何網路請求。唯一的出站流量是標準頁面載入資源(CSS、字型、分析),你的文字永遠不會抵達 Ultim8Soft。

我該為變數名選擇哪種大小寫格式?

取決於語言與團隊的風格指南。JavaScript 與 TypeScript 程式碼庫壓倒性地把 camelCase 用於變數與函式、PascalCase 用於類別與 React 元件、CONSTANT_CASE 用於環境變數名與模組級常數 — Google JavaScript 風格指南與 Airbnb 風格指南都這麼規定。Python(PEP 8)、Ruby 與 Rust 偏好 snake_case 用於變數與函式、PascalCase 用於類別、CONSTANT_CASE 用於模組級常數。C 與 C++ 程式碼庫(Linux 核心、LLVM)對函式偏好 snake_case,對前置處理巨集使用 CONSTANT_CASE。不確定時請執行團隊的 linter 或 formatter — 它會告訴你哪一種慣例正在被執行。

輸入如何被分詞?

分詞器先以任何連續的空白、底線(_)、連字符(-)、點(.)或斜線(/)切分輸入。每個產生的片段再以小寫到大寫的邊界切分一次(因此 helloWorld 變為 ["hello", "World"]),並以字母與數字邊界切分(因此 v2API 變為 ["v", "2", "API"])。空 token 被過濾掉,其餘 token 透過 String.prototype.toLocaleLowerCase 轉為小寫。然後格式化器以每種目標大小寫所需的分隔符重新大寫並重新拼接這些 token。這個策略可開箱即用地處理六種常見識別字形狀 — camelCase、PascalCase、snake_case、kebab-case、CONSTANT_CASE,以及普通的空格分隔散文。

對於 Unicode / 非 ASCII 字元呢?

Unicode 字母會完整往返。分詞器使用 String.prototype.toLocaleLowerCasetoLocaleUpperCase,它們會遵守地區特定的大小寫規則 — 土耳其語有點與無點的 i、德語 ß 大寫為 SS、法語與西班牙語中的重音拉丁字母等等。不在分隔符集合(空白、_-./)中的非字母字元 — 例如數字、重音字母或 CJK 字元 — 會留在它們所在的 token 內,大小寫格式化器會原樣重新輸出。這表示像 nœud_principal 這樣的輸入會分詞為 ["nœud", "principal"],並乾淨地轉換為 nœudPrincipal(camelCase)或 NœudPrincipal(PascalCase)。

此大小寫轉換器是一個單一靜態頁面,完全在你的瀏覽器中執行分詞器與十一個格式化器 — 無第三方函式庫、每次轉換都不發出網路呼叫、無需註冊。在上方貼上任意文字,並列掃視十一種大小寫輸出,複製你需要的那一種。