การแปลงตัวพิมพ์ข้อความคืออะไร?
การแปลงตัวพิมพ์ข้อความรับสตริงอินพุตและสร้างคำเดียวกันออกมาในระเบียบตัวพิมพ์ที่แตกต่าง เป้าหมายที่พบบ่อยที่สุดคือ camelCase และ PascalCase (ใช้สำหรับตัวระบุในภาษาวงเล็บปีกกาส่วนใหญ่), snake_case และ CONSTANT_CASE (Python, Ruby, Rust, มาโคร C), kebab-case (URL, ชื่อคลาส CSS, แอตทริบิวต์ HTML, ชื่อแพ็กเกจ npm), dot.case (คีย์การตั้งค่า, เส้นทางอ็อบเจ็กต์ JavaScript), path/case (ตัวระบุสไตล์ไฟล์ซิสเต็ม), Title Case และ Sentence case (หัวเรื่องและร้อยแก้ว) บวกกับ lower case และ UPPER CASE เต็มรูปแบบ ตัวแปลงนี้ตรวจจับขอบเขตคำธรรมชาติในอินพุตของคุณ — ช่องว่าง, ขีดกลาง, ขีดล่าง, จุด, สแลช, และการเปลี่ยนผ่าน lowercase→uppercase ที่ทำเครื่องหมายตัวระบุสไตล์ helloWorld — และประกอบใหม่ด้วยตัวคั่นและรูปแบบการขึ้นต้นพิมพ์ใหญ่ที่แต่ละกรณีเป้าหมายต้องการ
การแปลงตัวพิมพ์ทำงานอย่างไร?
อินพุตของคุณถูกประมวลผลทั้งหมดในเบราว์เซอร์โดยใช้ tokeniser vanilla JavaScript ขนาดเล็กและตัวจัดรูปแบบ 11 แบบ ขั้นตอนระดับสูงคือ:
- อินพุตของคุณถูกอ่านตรงตามตัวอักษรจาก textarea — ทุกไบต์ที่คุณวางถูกเก็บไว้ในหน่วยความจำท้องถิ่น
- tokeniser แบ่งอินพุตที่ช่องว่าง, ขีดล่าง, ขีดกลาง, จุด, และสแลช จากนั้นแบ่งแต่ละชิ้นเพิ่มเติมที่ขอบเขต lowercase→uppercase (ดังนั้น
helloWorldกลายเป็น["hello", "World"]) และที่ขอบเขตตัวอักษร↔ตัวเลข (ดังนั้นv2APIกลายเป็น["v", "2", "API"]) - token ว่างเปล่าถูกกรองออกและ token ที่เหลือถูกแปลงเป็นตัวพิมพ์เล็กโดยใช้
String.prototype.toLocaleLowerCaseเพื่อให้ตัวอักษร Unicode ในภาษาตุรกี, เยอรมัน และ locale อื่นๆ ถูกรักษาไว้อย่างถูกต้อง - จากนั้นตัวจัดรูปแบบทั้ง 11 ประกอบ token เป็นแต่ละกรณีเป้าหมาย — camelCase, PascalCase, snake_case, CONSTANT_CASE, kebab-case, dot.case, path/case, Title Case (พร้อมรายการ small-words เพื่อให้
and,the,ofฯลฯ คงเป็นตัวพิมพ์เล็กยกเว้นเมื่อเป็นคำแรกหรือคำสุดท้าย), Sentence case, lower case เต็มรูปแบบ และ UPPER CASE เต็มรูปแบบ - เอาต์พุตถูกเขียนหนึ่งแถวต่อหนึ่งกรณีในตารางผลลัพธ์; แต่ละแถวมีปุ่มคัดลอกของตัวเองที่ใช้ Clipboard API แบบ asynchronous พร้อม fallback แบบ synchronous
document.execCommand('copy')สำหรับเบราว์เซอร์รุ่นเก่า
ทำไมต้องใช้ตัวแปลงตัวพิมพ์?
- รีแฟกเตอร์ตัวระบุ: เปลี่ยนชื่อตัวแปร JavaScript จาก
user_idเป็นuserId, ฟังก์ชัน Python จากhelloWorldเป็นhello_world, หรือค่าคงที่ Rust จากmaxBufferเป็นMAX_BUFFERโดยไม่ต้องแก้ไขทีละอักขระด้วยตนเอง - แปลงคีย์การตั้งค่า: พลิก JSON config เต็มไปด้วยคีย์ camelCase ไปยัง snake_case YAML สำหรับบริการ Python หรือไปยัง kebab-case สำหรับ Helm chart ในการวางครั้งเดียว
- เขียนหัวข่าว: วางร่างหัวข่าวและอ่านรูปแบบ Title Case (พร้อมข้อยกเว้น small-words ของ Chicago Manual of Style) ข้างกับรูปแบบ Sentence case (AP Stylebook) — เลือกตามที่สิ่งพิมพ์ของคุณใช้
- สร้าง URL slug: วางหัวข้อโพสต์บล็อกและคัดลอกรูปแบบ kebab-case ลงในช่อง slug ของ CMS ของคุณโดยตรง — tokeniser จัดการเครื่องหมายวรรคตอนและวลีหลายคำโดยไม่ทิ้งตัวคั่นที่หลงเหลือ
การประยุกต์ใช้ทั่วไปของการแปลงตัวพิมพ์คืออะไร?
การสลับระหว่างระเบียบตัวพิมพ์ปรากฏในวิศวกรรมซอฟต์แวร์, การสร้างเนื้อหา และวิศวกรรมข้อมูล:
- การรีแฟกเตอร์โค้ด: เปลี่ยนชื่อตัวระบุข้าม codebase เมื่อ style guide เปลี่ยนแปลง (เช่น JavaScript camelCase → Python snake_case ระหว่างการเขียน backend ใหม่) โดยไม่แนะนำ typo
- ปรับรูปแบบ payload API: แปลงคีย์ JSON camelCase เป็น snake_case ก่อนป้อนให้ backend Ruby on Rails หรือ Django หรือเป็น kebab-case สำหรับชื่อคลาส CSS-in-JS
- การสร้างหัวข่าวและ slug: ผลิตหัวข้อหน้า Title Case, meta description Sentence case, และ URL slug kebab-case จากหัวข่าวต้นทางเดียวกันในขั้นตอนเดียว
ตัวอย่างการแปลงตัวพิมพ์เป็นอย่างไร?
วาง 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 ก็ tokenise เป็นสามคำเดียวกัน — ตัวตรวจจับขอบเขต lowercase→uppercase จัดการรูปแบบนั้นได้ด้วย
สิ่งนี้ทำงานในเบราว์เซอร์ของฉันหรือไม่?
ใช่ tokeniser และตัวจัดรูปแบบทั้ง 11 มีประมาณ 120 บรรทัดของ vanilla JavaScript ที่ทำงานอยู่ภายในแท็บเบราว์เซอร์ ไม่มีการอัปโหลด ไม่มี service worker มาแทรกอินพุตของคุณ และหน้าทำการร้องขอเครือข่ายเป็นศูนย์สำหรับขั้นตอนการแปลงเอง การจราจรขาออกเพียงอย่างเดียวคือสินทรัพย์การโหลดหน้ามาตรฐาน (CSS, ฟอนต์, การวิเคราะห์) — ข้อความของคุณไม่เคยถึง Ultim8Soft
ฉันควรใช้รูปแบบตัวพิมพ์ใดสำหรับชื่อตัวแปร?
ขึ้นอยู่กับภาษาและ style guide ของทีม codebase JavaScript และ TypeScript ใช้ camelCase อย่างท่วมท้นสำหรับตัวแปรและฟังก์ชัน, PascalCase สำหรับคลาสและคอมโพเนนต์ React และ CONSTANT_CASE สำหรับชื่อตัวแปรสภาพแวดล้อมและค่าคงที่ระดับโมดูล — Google JavaScript style guide และ Airbnb style guide ทั้งคู่ตรึงตัวเลือกเหล่านั้น Python (PEP 8), Ruby และ Rust ชอบ snake_case สำหรับตัวแปรและฟังก์ชัน, PascalCase สำหรับคลาส และ CONSTANT_CASE สำหรับค่าคงที่ระดับโมดูล codebase C และ C++ (Linux kernel, LLVM) เอนไปทาง snake_case สำหรับฟังก์ชันและ CONSTANT_CASE สำหรับ preprocessor มาโคร เมื่อสงสัย รัน linter หรือ formatter ของทีมคุณ — มันจะบอกว่าระเบียบใดถูกบังคับใช้
อินพุตถูก tokenise อย่างไร?
tokeniser แบ่งอินพุตที่ run ใดๆ ของช่องว่าง, ขีดล่าง (_), ขีดกลาง (-), จุด (.), หรือสแลช (/) ก่อน แต่ละชิ้นที่ได้จะถูกแบ่งอีกครั้งที่ขอบเขต lowercase→uppercase (ดังนั้น helloWorld กลายเป็น ["hello", "World"]) และที่ขอบเขตตัวอักษร↔ตัวเลข (ดังนั้น v2API กลายเป็น ["v", "2", "API"]) token ว่างเปล่าถูกกรองออกและ token ที่เหลือถูกแปลงเป็นตัวพิมพ์เล็กผ่าน String.prototype.toLocaleLowerCase ตัวจัดรูปแบบจากนั้นทำการขึ้นต้นพิมพ์ใหญ่ใหม่และเชื่อม token ใหม่ด้วยตัวคั่นที่แต่ละกรณีเป้าหมายต้องการ กลยุทธ์นี้จัดการรูปแบบตัวระบุทั่วไปทั้งหกแบบ — camelCase, PascalCase, snake_case, kebab-case, CONSTANT_CASE, และร้อยแก้วที่คั่นด้วยช่องว่างธรรมดา — ทันที
แล้วอักขระ Unicode / ที่ไม่ใช่ ASCII ล่ะ?
ตัวอักษร Unicode รอดจากการเดินทางไปกลับ tokeniser ใช้ String.prototype.toLocaleLowerCase และ toLocaleUpperCase ซึ่งให้เกียรติกฎการขึ้นต้นพิมพ์ใหญ่เฉพาะ locale — i มีจุดเทียบกับไม่มีจุดในภาษาตุรกี, ß เยอรมันที่ขึ้นต้นพิมพ์ใหญ่เป็น SS, ตัวอักษรละตินที่มีเครื่องหมายเน้นในภาษาฝรั่งเศสและสเปน และอื่นๆ อักขระที่ไม่ใช่ตัวอักษรซึ่งไม่อยู่ในชุดตัวคั่น (ช่องว่าง, _, -, ., /) — ตัวอย่างเช่นตัวเลข, ตัวอักษรที่มีเครื่องหมายเน้น, หรืออักขระ CJK — ถูกเก็บไว้ภายใน token ที่ปรากฏและตัวจัดรูปแบบส่งออกตามตัวอักษร นั่นหมายความว่าอินพุตเช่น nœud_principal tokenise เป็น ["nœud", "principal"] และแปลงสะอาดเป็น nœudPrincipal (camelCase) หรือ NœudPrincipal (PascalCase)
ตัวแปลงตัวพิมพ์นี้เป็นหน้า static เดียวที่รัน tokeniser และตัวจัดรูปแบบทั้ง 11 ทั้งหมดในเบราว์เซอร์ของคุณ — ไม่มีไลบรารี vendor, ไม่มีการเรียกเครือข่ายต่อการแปลง, ไม่มีบัญชี วางข้อความใดก็ได้ด้านบน, สแกนเอาต์พุตทั้ง 11 รูปแบบเคียงข้างกัน, และคัดลอกตัวที่คุณต้องการ