工具小筆記|解決「冒號與底線」轉換的奇怪 Bug

更新 發佈閱讀 4 分鐘

從一個不起眼的 Bug 開始

最近在做 LINE Bot 設定功能時,收到一個奇怪的使用者回報:

同樣是輸入「設定1_台中_07:30_平日」,系統卻有時候抓不到時間。

仔細一看,問題不在邏輯,而是在 輸入文字的符號 ——

原來有些手機鍵盤輸出的「冒號」並不是半形的 :

而是全形 ,甚至還有一些更冷門的變體字元。

底線 _ 也有同樣的情況。


我們發現了什麼?

在實際測試中,我遇到了這些奇妙的符號:

符號 Unicode 名稱 最終轉換 : U+FF1A 全形冒號 Fullwidth Colon : ﹕ U+FE55 Small Colon : ꞉ U+A789 Modifier Letter Colon : ː U+02D0 Modifier Letter Triangular Colon : ∶ U+2236 Ratio : _ U+FF3F 全形底線 Fullwidth Low Line _ ﹏ U+FE4F Wavy Low Line _

這些符號看起來幾乎一模一樣,但對程式來說是完全不同的字元。

如果不處理,資料比對就會失敗。


我的解法:normalizeInput()

我寫了一個小工具函式,把常見的變體全部轉成標準半形符號:

function normalizeInput(str) {
if (!str) return "";

return str
// 台 → 臺
.replace(//g, "臺")
// 冒號變體
.replace(/[\uFF1A\uFE55\uA789\u02D0\u2236]/g, ":")
// 底線變體
.replace(/[\uFF3F\uFE4F]/g, "_")
// 去除前後空白
.trim();
}

這樣,不管使用者輸入什麼奇怪的冒號或底線,都能正確比對。


實測紀錄

IN : 設定1_台中_07:30_平日
OUT: 設定1_臺中_07:30_平日

IN : 設定1_臺中_0730_平日
OUT: 設定1_臺中_07:30_平日

IN : 設定1꞉臺中_07ː30﹏平日
OUT: 設定1:臺中_07:30_平日

🪄 給非工程師的版本

想像一下,你在餐廳點餐,跟店員說「我要牛肉麵」。

結果店員聽到的卻是「牛☆肉☆麵」,因為你用了奇怪的發音符號。 雖然你看起來講的是同一句話,但對系統(或是店員的收銀機)來說,這已經是不同的字了。

我們這次的問題就是一樣的:

  • 你以為打的是 :(半形冒號)
  • 手機其實輸出的是 (全形冒號)或其他更罕見的符號

解法就是把這些「長得像」的符號全部換成系統能認得的標準版本,

就像在點餐時,統一用店員熟悉的標準發音。


💬 你有遇過類似的符號坑嗎?

留言跟我分享你踩過的輸入法陷阱, 也許下一篇我們可以一起整理一份「輸入法黑名單」🤭


留言
avatar-img
留言分享你的想法!
avatar-img
麟幻的沙龍
2會員
28內容數
軟體、旅遊分享
麟幻的沙龍的其他內容
2025/11/03
本文深入比較臺鐵 LINE Bot 的免費、標準、進階會員方案,詳細列出各方案的功能、配額、適合族群及升級理由。透過「快速選擇指南」與「實際使用情境分析」,協助用戶依據通勤頻率、路線數量、時間敏感度等需求,找到最適合的方案。文末並提供購買、兌換流程、常見問題 Q&A 及短期旅遊版方案介紹。
2025/11/03
本文深入比較臺鐵 LINE Bot 的免費、標準、進階會員方案,詳細列出各方案的功能、配額、適合族群及升級理由。透過「快速選擇指南」與「實際使用情境分析」,協助用戶依據通勤頻率、路線數量、時間敏感度等需求,找到最適合的方案。文末並提供購買、兌換流程、常見問題 Q&A 及短期旅遊版方案介紹。
2025/10/31
文章介紹臺鐵 LINE Bot 的「到站提醒」功能,如何解決通勤族常遇到的坐過站問題。詳細說明功能特色、使用設定、不同會員等級的提醒次數、配額管理,以及實際應用情境,並預告未來的「進站提醒」功能。
Thumbnail
2025/10/31
文章介紹臺鐵 LINE Bot 的「到站提醒」功能,如何解決通勤族常遇到的坐過站問題。詳細說明功能特色、使用設定、不同會員等級的提醒次數、配額管理,以及實際應用情境,並預告未來的「進站提醒」功能。
Thumbnail
2025/10/31
厭倦了和伴侶或室友為了金錢爭執?嘗試過無數記帳 App 卻總不滿意?本文介紹一款由個人需求出發,完全免費、整合個人與共同記帳功能、資料自主掌控、介面簡潔易用的記帳系統。詳細解析系統特色、實際使用情境、多樣化實用功能、安全性,並對比市售 App。
Thumbnail
2025/10/31
厭倦了和伴侶或室友為了金錢爭執?嘗試過無數記帳 App 卻總不滿意?本文介紹一款由個人需求出發,完全免費、整合個人與共同記帳功能、資料自主掌控、介面簡潔易用的記帳系統。詳細解析系統特色、實際使用情境、多樣化實用功能、安全性,並對比市售 App。
Thumbnail
看更多
你可能也想看
Thumbnail
想開始學塔羅卻不知道要準備哪些工具?這篇整理塔羅新手必備好物清單,從塔羅牌、塔羅布到收納袋與香氛噴霧一次入手。趁蝦皮雙11優惠打造專屬占卜空間,還能加入蝦皮分潤計畫,用分享創造收入。
Thumbnail
想開始學塔羅卻不知道要準備哪些工具?這篇整理塔羅新手必備好物清單,從塔羅牌、塔羅布到收納袋與香氛噴霧一次入手。趁蝦皮雙11優惠打造專屬占卜空間,還能加入蝦皮分潤計畫,用分享創造收入。
Thumbnail
今天不只要分享蝦皮分潤計畫,也想分享最近到貨的魔法少年賈修扭蛋開箱,還有我的雙11購物清單,漫畫、文具、Switch2、後背包......雙11優惠真的超多,如果有什麼一直想買卻遲遲還沒下手的東西,最適合趁這個購物季趕緊下單!
Thumbnail
今天不只要分享蝦皮分潤計畫,也想分享最近到貨的魔法少年賈修扭蛋開箱,還有我的雙11購物清單,漫畫、文具、Switch2、後背包......雙11優惠真的超多,如果有什麼一直想買卻遲遲還沒下手的東西,最適合趁這個購物季趕緊下單!
Thumbnail
Selenium 是一個範圍廣泛的工具和函式庫的總稱專案,用於啟用和支援網頁瀏覽器的自動化。Selenium WebDriver 提供了 C#、JavaScript、Java、Python、Ruby 等多種語言的 API,可以用於編寫自動化測試軟體。 在定位元素時,WebDriver 提供對這 8
Thumbnail
Selenium 是一個範圍廣泛的工具和函式庫的總稱專案,用於啟用和支援網頁瀏覽器的自動化。Selenium WebDriver 提供了 C#、JavaScript、Java、Python、Ruby 等多種語言的 API,可以用於編寫自動化測試軟體。 在定位元素時,WebDriver 提供對這 8
Thumbnail
JavaScript 演義 #21: 百步穿楊,數字天長
Thumbnail
JavaScript 演義 #21: 百步穿楊,數字天長
Thumbnail
JavaScript 演義 #17: 曹操短歌行,字串流傳
Thumbnail
JavaScript 演義 #17: 曹操短歌行,字串流傳
Thumbnail
在 UiPath 的學習道路上,我們常會對這些各項功能、參數感到混亂,因此RPA數位優化器的系列文章將會對這些功能參數進行解說。RPAI數位優化器這次要介紹Inject JS Script功能!想要更精準地與網頁進行互動、操作網頁元件時,就千萬不能錯過這個功能,可以幫助RPA機器人更精準地操作流程!
Thumbnail
在 UiPath 的學習道路上,我們常會對這些各項功能、參數感到混亂,因此RPA數位優化器的系列文章將會對這些功能參數進行解說。RPAI數位優化器這次要介紹Inject JS Script功能!想要更精準地與網頁進行互動、操作網頁元件時,就千萬不能錯過這個功能,可以幫助RPA機器人更精準地操作流程!
Thumbnail
先說學期2-1完課的整體感覺: 非常精彩刺激!
Thumbnail
先說學期2-1完課的整體感覺: 非常精彩刺激!
Thumbnail
你可能已經看過 “ES6” 或 “JavaScript ES6” 一詞,並想知道它實際意味著什麼。別再想了,因為我們將深入研究 ES6 究竟是什麼,以及它與 JavaScript 的關係!
Thumbnail
你可能已經看過 “ES6” 或 “JavaScript ES6” 一詞,並想知道它實際意味著什麼。別再想了,因為我們將深入研究 ES6 究竟是什麼,以及它與 JavaScript 的關係!
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News