ToolHub
View All Posts

รูปแบบ 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. การตรวจสอบอีเมล

รูปแบบอีเมลพื้นฐาน

^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$

รูปแบบนี้ตรวจสอบโครงสร้างพื้นฐานของที่อยู่อีเมล: อักขระที่อนุญาตหนึ่งตัวขึ้นไปก่อน @ ตามด้วยชื่อโดเมนที่มีจุดอย่างน้อยหนึ่งจุด และ TLD ที่มีตัวอักษรสองตัวขึ้นไป มันจับรูปแบบที่ไม่ถูกต้องส่วนใหญ่ในขณะที่อนุญาตให้ที่อยู่ที่ถูกต้องผ่าน

จับคู่: user@example.com, john.doe+tag@company.co.uk

ไม่จับคู่: user@, @example.com, user@.com

หมายเหตุสำคัญ: ไม่มี Regular Expression ใดที่สามารถตรวจสอบที่อยู่อีเมลที่ถูกต้องทั้งหมดใน RFC 5322 ได้อย่างสมบูรณ์ ใช้รูปแบบนี้สำหรับการตรวจสอบรูปแบบพื้นฐาน จากนั้นตรวจสอบที่อยู่โดยการส่งอีเมลยืนยัน สำหรับแอปพลิเคชันการผลิต ใช้การตรวจสอบ Regular Expression ร่วมกับการตรวจสอบชื่อโดเมน

2. การตรวจสอบ URL

รูปแบบ HTTP/HTTPS URL

^https?:\/\/(www\.)?[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}(\/[^\s]*)?$

รูปแบบนี้จับคู่ 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. การตรวจสอบหมายเลขโทรศัพท์

หมายเลขโทรศัพท์ระหว่างประเทศ

^\+?[1-9]\d{1,14}$

รูปแบบนี้เป็นไปตามรูปแบบหมายเลขโทรศัพท์ระหว่างประเทศ E.164 มันอนุญาตคำนำหน้า + ที่เป็นตัวเลือก ต้องการตัวเลขหลักแรกเป็น 1-9 (ไม่มีศูนย์นำหน้า) และอนุญาตตัวเลขสูงสุด 15 หลัก นี่เป็นรูปแบบที่น่าเชื่อถือที่สุดสำหรับการจัดเก็บและตรวจสอบหมายเลขโทรศัพท์ระหว่างประเทศ

จับคู่: +14155552671, 442071838750

ไม่จับคู่: +01xxxxxxxxx, 123

4. ความแข็งแกร่งของรหัสผ่าน

รูปแบบรหัสผ่านที่แข็งแกร่ง

^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$

รูปแบบนี้บังคับใช้นโยบายรหัสผ่านที่แข็งแกร่ง: อย่างน้อย 8 ตัวอักษร ประกอบด้วยตัวพิมพ์เล็กอย่างน้อยหนึ่งตัว ตัวพิมพ์ใหญ่อย่างน้อยหนึ่งตัว ตัวเลขอย่างน้อยหนึ่งตัว และอักขระพิเศษอย่างน้อยหนึ่งตัว ไวยากรณ์ (?=.*[...]) ใช้ positive lookahead เพื่อตรวจสอบการมีอยู่ของอักขระแต่ละประเภทโดยไม่ใช้อักขระ

จับคู่: MyP@ss1word, Str0ng!Pass

ไม่จับคู่: password, Password1, P@ss

5. การตรวจสอบที่อยู่ IP

ที่อยู่ IPv4

^(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)$

รูปแบบนี้ตรวจสอบที่อยู่ 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)

^\d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12]\d|3[01])$

รูปแบบนี้ตรวจสอบวันที่ในรูปแบบ 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

^#(?:[0-9a-fA-F]{3}){1,2}$

รูปแบบนี้จับคู่รหัสสีเลขฐานสิบหก CSS รวมถึงรูปแบบย่อ 3 หลัก (#fff) และรูปแบบเต็ม 6 หลัก (#ffffff) ตัวระบุปริมาณ {1,2} อนุญาตการทำซ้ำ 1 หรือ 2 ครั้งของกลุ่มเลขฐานสิบหก 3 หลัก รองรับทั้งสองรูปแบบ

จับคู่: #fff, #FF5733, #1e293b

ไม่จับคู่: fff, #ff, #1234567

8. Slug / สตริงที่ปลอดภัยสำหรับ URL

รูปแบบ URL Slug

^[a-z0-9]+(?:-[a-z0-9]+)*$

รูปแบบนี้ตรวจสอบ URL slug: สตริงตัวอักษรและตัวเลขพิมพ์เล็กที่คั่นด้วยเครื่องหมายขีดกลาง มันช่วยให้มั่นใจว่าไม่มีเครื่องหมายขีดกลางนำหน้าหรือต่อท้าย และไม่มีเครื่องหมายขีดกลางต่อเนื่อง รูปแบบนี้เป็นมิตรกับ SEO และปลอดภัยสำหรับ URL, ชื่อไฟล์ และตัวระบุ

จับคู่: my-blog-post, regex-patterns-guide, tool123

ไม่จับคู่: My-Post, -slug, slug-, my--post

9. หมายเลขบัตรเครดิต

รูปแบบบัตรเครดิตทั่วไป

^(?:4\d{12}(?:\d{3})?|5[1-5]\d{14}|3[47]\d{13}|6(?:011|5\d{2})\d{12})$

รูปแบบนี้ตรวจสอบหมายเลขบัตรเครดิตหลัก: Visa (ขึ้นต้นด้วย 4, 13 หรือ 16 หลัก), Mastercard (ขึ้นต้นด้วย 51-55, 16 หลัก), American Express (ขึ้นต้นด้วย 34 หรือ 37, 15 หลัก) และ Discover (ขึ้นต้นด้วย 6011 หรือ 65, 16 หลัก) ใช้ร่วมกับอัลกอริทึม Luhn เพื่อการตรวจสอบที่สมบูรณ์

10. การจับคู่แท็ก HTML

การดึงแท็ก HTML

<([a-z][a-z0-9]*)\b[^>]*>(.*?)<\/\1>

รูปแบบนี้จับคู่แท็ก HTML เปิดและปิดพร้อมเนื้อหา กลุ่มจับคู่แรก ([a-z][a-z0-9]*) จับชื่อแท็ก และ backreference \1 ช่วยให้มั่นใจว่าแท็กปิดตรงกับแท็กเปิด (.*?) ใช้การจับคู่แบบ lazy เพื่อจับเนื้อหาระหว่างแท็กโดยได้การจับคู่ที่สั้นที่สุด

เคล็ดลับการเขียน Regular Expression ที่ดีขึ้น

ต้องการทดสอบรูปแบบ 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) รองรับคุณสมบัติมากกว่าเอนจินอื่นๆ ส่วนใหญ่ ควรทดสอบรูปแบบในภาษาเป้าหมายเสมอ