ในฐานะนักพัฒนาระบบและผู้ดูแลข้อมูล (Data Architect) เราทราบดีว่าการจัดการเนื้อหาบทความจำนวนมาก (Content Management System – CMS) มักเผชิญกับปัญหาด้านความสม่ำเสมอของรูปแบบ (Consistency) โดยเฉพาะอย่างยิ่งเรื่องของการเว้นวรรครอบเครื่องหมายวงเล็บ ()
การจัดวางช่องว่างที่ผิดพลาด ไม่เพียงแต่ทำให้บทความดูไม่เป็นมืออาชีพ แต่ยังขัดต่อหลักเกณฑ์ทางภาษาของสำนักงานราชบัณฑิตยสภา บทความนี้จึงไม่ได้สอนแค่หลักไวยากรณ์ แต่จะพาคุณไปใช้พลังของ PostgreSQL และ Regular Expression (Regex) เพื่อแก้ไขข้อมูลที่ผิดพลาดทั้งฐานข้อมูลให้เป็นมาตรฐานเดียวกันในคำสั่งเดียว
💡 หลักการใช้นขลิขิต (วงเล็บ) ตามมาตรฐานราชบัณฑิตยสภา
ก่อนจะลงมือเขียนโค้ด เราต้องเข้าใจกฎเหล็กที่ต้องการแก้ไขเสียก่อน โดยอ้างอิงจากหลักเกณฑ์ของราชบัณฑิตยสภามีข้อกำหนดสำคัญดังนี้:
- ภายในวงเล็บ (Inside): ข้อความต้องเขียนติดกับวงเล็บเปิดและปิดทันที
(... ) - ก่อนเปิดวงเล็บ (Before): ให้เว้นวรรค 1 ครั้ง ก่อนตัววงเล็บเปิด
คำ ( - หลังปิดวงเล็บ (After): ให้เว้นวรรค 1 ครั้ง หลังตัววงเล็บปิด
) คำ
🛠️ การแปลงกฎภาษาเป็นโค้ด PostgreSQL (Regex)
เมื่อข้อมูลอยู่ในฐานข้อมูลขนาดใหญ่ การแก้ไขด้วยมือจึงเป็นไปไม่ได้ เราจะใช้คำสั่ง UPDATE ร่วมกับฟังก์ชัน REGEXP_REPLACE ของ PostgreSQL
⚠️ ข้อควรระวังระดับ Senior Architect: ก่อนรันคำสั่งนี้กับ Production Database อย่างเด็ดขาด โปรดทำการ Backup (Snapshot) ตารางข้อมูลที่เกี่ยวข้องเสมอ เพื่อป้องกันความเสียหายของ Data Integrity
สคริปต์ด้านล่างนี้จะทำงานเป็น Pipeline 3 ขั้นตอนเพื่อแก้ไขช่องว่างให้ถูกต้องตามมาตรฐาน:
SQL
SQL
-- สมมติว่าตารางชื่อ 'articles' และคอลัมน์เนื้อหาคือ 'content'
UPDATE articles
SET content = REGEXP_REPLACE(
REGEXP_REPLACE(
REGEXP_REPLACE(content, '\s*\(\s*', ' (', 'g'), -- Step 1: เคลียร์ช่องว่างรอบวงเล็บเปิด ให้เหลือเว้นวรรคด้านหน้า 1 ช่อง
'\s*\)\s*', ') ', 'g'), -- Step 2: เคลียร์ช่องว่างภายในและบังคับให้มีเว้นวรรคหลังปิด
' {2,}', ' ', 'g') -- Step 3: ยุบ Double Space (ช่องว่างเบิ้ล) ให้เหลือเพียง 1 ช่อง
)
WHERE content ~ '[\(\)]'; -- เลือกเฉพาะแถวที่มีวงเล็บ เพื่อ Optimize Performance
🔍 คำอธิบายการทำงานของสคริปต์ (PostgreSQL Logic)
'\s*\(\s*', ' (', 'g'): Regex นี้ค้นหาการรวมกันของช่องว่างใด ๆ (`\s*`) ก่อนและหลังวงเล็บเปิด() จากนั้นแทนที่ด้วย ` ( ` เพื่อให้แน่ใจว่ามีเว้นวรรคด้านหน้าเพียงครั้งเดียว และเนื้อหาภายในจะชิดขอบทันที'\s*\)\s*', ') ', 'g'): ค้นหาช่องว่างรอบวงเล็บปิด() และแทนที่ด้วย `) ` เพื่อให้เนื้อหาภายในชิดขอบและบังคับเว้นวรรคด้านหลัง 1 ช่องเสมอ' {2,}', ' ', 'g'): เป็นการทำความสะอาดขั้นสุดท้าย (Cleanup) เพื่อยุบช่องว่างที่อาจเกิดจากการทำงานของ Regex ก่อนหน้า ให้เหลือเพียงช่องว่างเดี่ยวตามหลักไวยากรณ์- WHERE content ~ ‘[\(\)]’: นี่คือการใช้ตัวดำเนินการ Regular Expression ของ PostgreSQL (`~`) เพื่อจำกัดขอบเขตการทำงานให้เฉพาะแถวที่มีเครื่องหมายวงเล็บเท่านั้น ซึ่งช่วยเพิ่มประสิทธิภาพในการประมวลผลข้อมูลขนาดใหญ่ได้อย่างมาก
✅ สรุปและข้อแนะนำจาก System Specialist
การใช้ SQL ร่วมกับ Regex ไม่ได้เป็นเพียงแค่การแก้ไขรูปแบบ แต่เป็นการยกระดับ Data Integrity ของระบบทั้งหมด เมื่อข้อมูลถูกจัดฟอร์แมตให้มีมาตรฐานเดียวกัน จะช่วยลดภาระงานของ Content Editor และทำให้เว็บไซต์ของคุณดูน่าเชื่อถือและเป็นมืออาชีพอย่างยิ่ง
หากคุณต้องการความแม่นยำสูงสุดในการจัดการเนื้อหา ควรพิจารณาการสร้าง Validation Layer ในระดับ Application Code ควบคู่ไปกับการทำ Data Cleansing ด้วย SQL เพื่อให้มั่นใจว่าข้อมูลใหม่ที่ถูกป้อนเข้ามาจะถูกต้องตั้งแต่ต้นทางครับ