Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

ใช้ REGEXP ใน MySQL ค้นหาเฉพาะหมายเลขโทรศัพท์รูปแบบ XXX-XXX-XXXX

การใช้ Regular Expression (REGEXP) กรองข้อมูลรูปแบบหมายเลขโทรศัพท์

MySQL รองรับ REGEXP สำหรับ Pattern Matching ใช้กรองเฉพาะแถวที่ตรงตามรูปแบบที่กำหนด

ตัวอย่าง: ค้นหาเฉพาะรูปแบบ XXX-XXX-XXXX (ตัวเลข 3-3-4 คั่น Hyphen)

สร้างตารางและเพิ่มข้อมูลผสม:

mysql> CREATE TABLE DemoTable (Code VARCHAR(100));
Query OK, 0 rows affected (1.16 sec)

mysql> INSERT INTO DemoTable VALUES 
    ('100-677-9876'),           -- ถูกต้อง
    ('100-677-9876-John'),      -- มีข้อความต่อท้าย
    ('David-100-677-9876');     -- มีข้อความนำหน้า
Query OK, 3 rows affected

ข้อมูลทั้งหมด:

mysql> SELECT * FROM DemoTable;
+--------------------+
| Code               |
+--------------------+
| 100-677-9876       |
| 100-677-9876-John  |
| David-100-677-9876 |
+--------------------+
3 rows in set (0.00 sec)

Regex Pattern: ^\(?[0-9]{3}\)?[\s-]?[0-9]{3}[\s-]?[0-9]{4}$

  • ^ - เริ่มสตริง
  • \(?[0-9]{3}\)? - เลข 3 หลัก อาจมีวงเล็บครอบ
  • [\s-]? - อาจมี Space หรือ Hyphen คั่น
  • [0-9]{3} - เลข 3 หลัก
  • [\s-]? - คั่นอีกครั้ง
  • [0-9]{4}$ - เลข 4 หลัก จบสตริง

คิวรี่ค้นหา:

mysql> SELECT * FROM DemoTable 
WHERE Code REGEXP '^\(?[0-9]{3}\)?[\s-]?[0-9]{3}[\s-]?[0-9]{4}$';
+--------------+
| Code         |
+--------------+
| 100-677-9876 |
+--------------+
1 row in set (0.00 sec)

Regex Pattern อื่นๆ ที่มีประโยชน์

รูปแบบRegexคำอธิบาย
Email^[^@]+@[^@]+\.[^@]+$รูปแบบพื้นฐาน
ไทย Mobile^0[689][0-9]{8}$06x, 08x, 09x 10 หลัก
ไทย ID Card^[0-9]{13}$13 หลัก
IPv4^([0-9]{1,3}\.){3}[0-9]{1,3}$พื้นฐาน
เฉพาะตัวเลข^[0-9]+$Digit only
อังกฤษ+ตัวเลข^[A-Za-z0-9]+$Alphanumeric

เคล็ดลับ

  • MySQL ใช้ POSIX Regex (ไม่ใช่ PCRE)
  • REGEXP BINARY - Case Sensitive
  • RLIKE = Alias ของ REGEXP
  • MySQL 8.0+ มี REGEXP_REPLACE(), REGEXP_SUBSTR()