รูปแบบ Regular Expression ที่นักพัฒนาทุกคนควรเชี่ยวชาญ
Regular Expression (regex) เป็นหนึ่งในเครื่องมือที่ทรงพลังที่สุดในกล่องเครื่องมือของนักพัฒนา มันช่วยให้คุณค้นหา ตรวจสอบ และแปลงข้อความด้วยรูปแบบที่กระชับ ซึ่งการดำเนินการเหล่านี้อาจต้องใช้โค้ดหลายสิบบรรทัดหากเขียนแบบขั้นตอน แม้ว่าไวยากรณ์ Regular Expression อาจดูเข้าใจยากในตอนแรก แต่การเชี่ยวชาญชุดรูปแบบหลักจะครอบคลุมกรณีการใช้งานจริงส่วนใหญ่ คู่มือนี้แนะนำรูปแบบ Regular Expression ที่คุณจะใช้ซ้ำแล้วซ้ำเล่า พร้อมคำอธิบายโดยละเอียดว่าแต่ละรูปแบบทำงานอย่างไร
ทบทวนพื้นฐาน Regular Expression
ก่อนที่จะเจาะลึกรูปแบบเฉพาะ นี่คือการทบทวนอย่างรวดเร็วของ metacharacter พื้นฐานที่ประกอบเป็นรูปแบบ Regular Expression ทั้งหมด:
| metacharacter | ความหมาย | ตัวอย่าง |
|---|---|---|
| . | อักขระเดี่ยวใดๆ | สำคัญ |
| * | อักขระก่อนหน้าศูนย์ครั้งหรือมากกว่า | ดึงข้อมูลแท็ก HTML |
| + | อักขระก่อนหน้าหนึ่งครั้งหรือมากกว่า | ab+c จับคู่ abc, abbc |
| ? | อักขระก่อนหน้าศูนย์ครั้งหรือหนึ่งครั้ง | ตั้งชั่วโมง นาที และวินาที |
| ^ | จุดเริ่มต้นสตริง | จำนวนเงินสุดท้าย |
| $ | จุดสิ้นสุดสตริง | จัดการธุรกรรม |
| [] | คลาสอักขระ | ทรัพยากรถูกย้ายไปยัง URL ใหม่อย่างถาวร |
| () | กลุ่มจับคู่ | จัดการ Patch Management |
| | | alternation (หรือ) | ตัวจับเวลาออนไลน์ทำงานอย่างไร |
| \d | ตัวเลข [0-9] | จัดการ Revenue Management |
| \w | อักขระคำ [a-zA-Z0-9_] | สามารถส่งออกข้อมูลนาฬิกาจับเวลาได้หรือไม่? |
| \s | อักขระช่องว่าง | จัดการ Configuration Management |
1. การตรวจสอบอีเมล
รูปแบบอีเมลพื้นฐาน
รูปแบบนี้ตรวจสอบโครงสร้างพื้นฐานของที่อยู่อีเมล: อักขระที่อนุญาตหนึ่งตัวขึ้นไปก่อน @ ตามด้วยชื่อโดเมนที่มีจุดอย่างน้อยหนึ่งจุด และ TLD ที่มีตัวอักษรสองตัวขึ้นไป มันจับรูปแบบที่ไม่ถูกต้องส่วนใหญ่ในขณะที่อนุญาตให้ที่อยู่ที่ถูกต้องผ่าน
จับคู่: user@example.com, john.doe+tag@company.co.uk
ไม่จับคู่: user@, @example.com, user@.com
2. การตรวจสอบ URL
รูปแบบ HTTP/HTTPS URL
รูปแบบนี้จับคู่ HTTP และ HTTPS URL พร้อมคำนำหน้า www ที่เป็นตัวเลือก รวมถึงชื่อโดเมนและเส้นทางที่เป็นตัวเลือก s? ทำให้ "s" ใน https เป็นตัวเลือก (www\.)? ทำให้คำนำหน้า www เป็นตัวเลือก ส่วนเส้นทาง (\/[^\s]*)? อนุญาตอักขระใดๆ ยกเว้นช่องว่างหลังชื่อโดเมน
จับคู่: https://example.com, http://www.example.com/path/to/page
ไม่จับคู่: ftp://example.com, example.com (ไม่มีโปรโตคอล)
3. การตรวจสอบหมายเลขโทรศัพท์
หมายเลขโทรศัพท์ระหว่างประเทศ
รูปแบบนี้เป็นไปตามรูปแบบหมายเลขโทรศัพท์ระหว่างประเทศ E.164 มันอนุญาตคำนำหน้า + ที่เป็นตัวเลือก ต้องการตัวเลขหลักแรกเป็น 1-9 (ไม่มีศูนย์นำหน้า) และอนุญาตตัวเลขสูงสุด 15 หลัก นี่เป็นรูปแบบที่น่าเชื่อถือที่สุดสำหรับการจัดเก็บและตรวจสอบหมายเลขโทรศัพท์ระหว่างประเทศ
จับคู่: +14155552671, 442071838750
ไม่จับคู่: +01xxxxxxxxx, 123
4. ความแข็งแกร่งของรหัสผ่าน
รูปแบบรหัสผ่านที่แข็งแกร่ง
รูปแบบนี้บังคับใช้นโยบายรหัสผ่านที่แข็งแกร่ง: อย่างน้อย 8 ตัวอักษร ประกอบด้วยตัวพิมพ์เล็กอย่างน้อยหนึ่งตัว ตัวพิมพ์ใหญ่อย่างน้อยหนึ่งตัว ตัวเลขอย่างน้อยหนึ่งตัว และอักขระพิเศษอย่างน้อยหนึ่งตัว ไวยากรณ์ (?=.*[...]) ใช้ positive lookahead เพื่อตรวจสอบการมีอยู่ของอักขระแต่ละประเภทโดยไม่ใช้อักขระ
จับคู่: MyP@ss1word, Str0ng!Pass
ไม่จับคู่: password, Password1, P@ss
5. การตรวจสอบที่อยู่ IP
ที่อยู่ IPv4
รูปแบบนี้ตรวจสอบที่อยู่ IPv4 พร้อมการตรวจสอบช่วงที่ถูกต้อง แต่ละ octet ต้องอยู่ระหว่าง 0 ถึง 255 รูปแบบใช้การจับคู่แบบ alternation: 250-255 (25[0-5]), 200-249 (2[0-4]\d) หรือ 0-199 ([01]?\d\d?) ซึ่งทำซ้ำสามครั้งหลังจุดสามจุด และครั้งสุดท้ายสำหรับ octet สุดท้าย
จับคู่: 192.168.1.1, 10.0.0.1, 255.255.255.0
ไม่จับคู่: 256.1.1.1, 192.168.1, 192.168.1.1.1
6. การตรวจสอบรูปแบบวันที่
YYYY-MM-DD (ISO 8601)
รูปแบบนี้ตรวจสอบวันที่ในรูปแบบ ISO 8601 (YYYY-MM-DD) มันตรวจสอบปีสี่หลัก เดือนระหว่าง 01-12 และวันระหว่าง 01-31 โปรดทราบว่ารูปแบบนี้ตรวจสอบรูปแบบแต่ไม่ตรวจสอบความถูกต้องเชิงตรรกะของวันที่ (เช่น มันอนุญาต 2026-02-31) สำหรับการตรวจสอบที่สมบูรณ์ ให้แยกวิเคราะห์วันที่และตรวจสอบด้วยโปรแกรม
จับคู่: 2026-05-20, 2025-01-01, 2024-12-31
ไม่จับคู่: 2026-5-20, 2026-13-01, 26-05-20
7. รหัสสีเลขฐานสิบหก
สีเลขฐานสิบหก CSS
รูปแบบนี้จับคู่รหัสสีเลขฐานสิบหก CSS รวมถึงรูปแบบย่อ 3 หลัก (#fff) และรูปแบบเต็ม 6 หลัก (#ffffff) ตัวระบุปริมาณ {1,2} อนุญาตการทำซ้ำ 1 หรือ 2 ครั้งของกลุ่มเลขฐานสิบหก 3 หลัก รองรับทั้งสองรูปแบบ
จับคู่: #fff, #FF5733, #1e293b
ไม่จับคู่: fff, #ff, #1234567
8. Slug / สตริงที่ปลอดภัยสำหรับ URL
รูปแบบ URL Slug
รูปแบบนี้ตรวจสอบ URL slug: สตริงตัวอักษรและตัวเลขพิมพ์เล็กที่คั่นด้วยเครื่องหมายขีดกลาง มันช่วยให้มั่นใจว่าไม่มีเครื่องหมายขีดกลางนำหน้าหรือต่อท้าย และไม่มีเครื่องหมายขีดกลางต่อเนื่อง รูปแบบนี้เป็นมิตรกับ SEO และปลอดภัยสำหรับ URL, ชื่อไฟล์ และตัวระบุ
จับคู่: my-blog-post, regex-patterns-guide, tool123
ไม่จับคู่: My-Post, -slug, slug-, my--post
9. หมายเลขบัตรเครดิต
รูปแบบบัตรเครดิตทั่วไป
รูปแบบนี้ตรวจสอบหมายเลขบัตรเครดิตหลัก: Visa (ขึ้นต้นด้วย 4, 13 หรือ 16 หลัก), Mastercard (ขึ้นต้นด้วย 51-55, 16 หลัก), American Express (ขึ้นต้นด้วย 34 หรือ 37, 15 หลัก) และ Discover (ขึ้นต้นด้วย 6011 หรือ 65, 16 หลัก) ใช้ร่วมกับอัลกอริทึม Luhn เพื่อการตรวจสอบที่สมบูรณ์
10. การจับคู่แท็ก HTML
การดึงแท็ก HTML
รูปแบบนี้จับคู่แท็ก HTML เปิดและปิดพร้อมเนื้อหา กลุ่มจับคู่แรก ([a-z][a-z0-9]*) จับชื่อแท็ก และ backreference \1 ช่วยให้มั่นใจว่าแท็กปิดตรงกับแท็กเปิด (.*?) ใช้การจับคู่แบบ lazy เพื่อจับเนื้อหาระหว่างแท็กโดยได้การจับคู่ที่สั้นที่สุด
เคล็ดลับการเขียน Regular Expression ที่ดีขึ้น
- เริ่มจากง่าย: เขียนรูปแบบเวอร์ชันพื้นฐานที่สุดก่อน แล้วค่อยๆ เพิ่มความซับซ้อน ทดสอบทุกขั้นตอน
- ใช้คลาสอักขระ: [a-z] ชัดเจนกว่า (a|b|c|...|z) คลาสที่มีชื่อเช่น \d, \w และ \s ช่วยเพิ่มความสามารถในการอ่าน
- ใช้ lazy quantifier ก่อน: เมื่อคุณต้องการการจับคู่ที่สั้นที่สุด ให้ใช้ *? และ +? แทน * และ + เพื่อหลีกเลี่ยงการจับคู่เกินแบบ greedy
- ใช้ anchor: ใช้ ^ และ $ ในรูปแบบการตรวจสอบเสมอเพื่อให้แน่ใจว่าจับคู่ทั้งสตริง ไม่ใช่แค่สตริงย่อย
- เมื่อใดควรใช้ตัวจับเวลา (นับถอยหลัง)
- ใส่ความคิดเห็นในรูปแบบที่ซับซ้อน: ใช้แฟล็ก x (verbose mode) เพื่อเพิ่มช่องว่างและความคิดเห็นในรูปแบบที่ซับซ้อน
ต้องการทดสอบรูปแบบ Regular Expression เหล่านี้แบบโต้ตอบหรือไม่? ลองใช้เครื่องมือทดสอบ Regular Expression ฟรีของเรา รองรับการจับคู่แบบเรียลไทม์ การแสดงกลุ่มจับคู่ด้วยภาพ และการอธิบายรูปแบบ
ทดสอบ Regular Expressionคำถามที่พบบ่อย
รูปแบบ Regular Expression คืออะไร?
รูปแบบ Regular Expression คือลำดับของอักขระที่กำหนดรูปแบบการค้นหา มันใช้สำหรับการจับคู่สตริง การตรวจสอบ การค้นหาและแทนที่ และการแยกวิเคราะห์ข้อความ รูปแบบ Regular Expression ใช้ metacharacter พิเศษเช่น . * + ? [] () และ {} เพื่อกำหนดกฎการจับคู่ที่ยืดหยุ่น
ฉันควรใช้ Regular Expression ตรวจสอบอีเมลหรือไม่?
ใช้ Regular Expression สำหรับการตรวจสอบรูปแบบอีเมลพื้นฐาน (ตรวจสอบสัญลักษณ์ @, โครงสร้างชื่อโดเมน) แต่อย่าพยายามตรวจสอบที่อยู่อีเมลทั้งหมดด้วย Regular Expression เพียงอย่างเดียว ข้อกำหนดอีเมล (RFC 5322) ซับซ้อนอย่างยิ่ง ไม่มี Regular Expression ใดที่สามารถตรวจสอบที่อยู่ที่ถูกต้องทั้งหมดได้อย่างสมบูรณ์ ในสภาพแวดล้อมการผลิต ควรใช้การตรวจสอบ Regular Expression พื้นฐานร่วมกับการตรวจสอบอีเมลจริง (ส่งลิงก์ยืนยัน)
greedy quantifier และ lazy quantifier แตกต่างกันอย่างไร?
greedy quantifier (*, +) จับคู่ข้อความให้มากที่สุด ในขณะที่ lazy quantifier (*?, +?) จับคู่ข้อความให้น้อยที่สุด ตัวอย่างเช่น เมื่อใช้กับ 'aabb' รูปแบบ greedy a.*b จับคู่ 'aabb' (ทั้งสตริง) ในขณะที่รูปแบบ lazy a.*?b จับคู่เพียง 'aab' (การจับคู่ที่สั้นที่สุด)
จะทดสอบรูปแบบ Regular Expression ได้อย่างไร?
ใช้เครื่องมือทดสอบ Regular Expression ออนไลน์ (เช่น ToolHub regex tester) เพื่อทดสอบรูปแบบแบบโต้ตอบ เครื่องมือเหล่านี้เน้นผลการจับคู่แบบเรียลไทม์ แสดงกลุ่มจับคู่ และอธิบายการทำงานของแต่ละส่วนของรูปแบบ
Regular Expression ในภาษาโปรแกรมต่างๆ เหมือนกันหรือไม่?
ไวยากรณ์ Regular Expression ส่วนใหญ่ใช้ร่วมกันระหว่างภาษา แต่คุณสมบัติขั้นสูงมีความแตกต่าง JavaScript ไม่รองรับ lookbehind assertion ในเอนจินรุ่นเก่า Python ใช้ไวยากรณ์ named group ที่แตกต่างจาก JavaScript และ PCRE (PHP) รองรับคุณสมบัติมากกว่าเอนจินอื่นๆ ส่วนใหญ่ ควรทดสอบรูปแบบในภาษาเป้าหมายเสมอ