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

ใช้ REGEXP ค้นหาสตริงที่มีตัวอักษรเล็ก พิมพ์ใหญ่ และตัวเลขครบทุกอย่างใน MySQL

การค้นหาสตริงที่ประกอบด้วย a-z, A-Z และ 0-9 ครบถ้วนด้วย REGEXP BINARY

ใช้ REGEXP BINARY (Case Sensitive) ร่วมกับ AND เพื่อตรวจสอบแต่ละกลุ่มตัวอักษรแยกกัน

Syntax

SELECT * FROM table_name 
WHERE column REGEXP BINARY '[a-z]' 
  AND column REGEXP BINARY '[A-Z]' 
  AND column REGEXP BINARY '[0-9]';

ตัวอย่างการใช้งาน

สร้างตารางและเพิ่มข้อมูล UserId หลากหลายรูปแบบ:

mysql> CREATE TABLE DemoTable738 (UserId VARCHAR(100));
Query OK, 0 rows affected (0.81 sec)

mysql> INSERT INTO DemoTable738 VALUES 
    ('John'), ('sAm456'), ('98Carol'), ('67david'), ('69MIKE');
Query OK, 5 rows affected

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

mysql> SELECT * FROM DemoTable738;
+---------+
| UserId  |
+---------+
| John    |
| sAm456  |
| 98Carol |
| 67david |
| 69MIKE  |
+---------+
5 rows in set (0.00 sec)

ค้นหาที่มี **ตัวเล็ก, ตัวใหญ่, ตัวเลข ครบ 3 อย่าง**:

mysql> SELECT * FROM DemoTable738 
WHERE UserId REGEXP BINARY '[A-Z]' 
  AND UserId REGEXP BINARY '[a-z]' 
  AND UserId REGEXP BINARY '[0-9]';
+---------+
| UserId  |
+---------+
| sAm456  |
| 98Carol |
+---------+
2 rows in set (0.03 sec)

อธิบาย:

  • John - มีตัวใหญ่/เล็ก แต่ **ไม่มีตัวเลข** → ตัด
  • sAm456 - มี s(เล็ก) A(ใหญ่) m(เล็ก) 456(เลข) → **ผ่าน**
  • 98Carol - มี 98(เลข) C(ใหญ่) arol(เล็ก) → **ผ่าน**
  • 67david - มี 67(เลข) david(เล็ก) **ไม่มีตัวใหญ่** → ตัด
  • 69MIKE - มี 69(เลข) MIKE(ใหญ่) **ไม่มีตัวเล็ก** → ตัด

Regex Pattern อื่นๆ สำหรับ Validation

เงื่อนไขRegex
อย่างน้อย 1 ตัวเล็ก, 1 ตัวใหญ่, 1 ตัวเลข, 8 ตัวขึ้นไป^(?=.*[a-z])(?=.*[A-Z])(?=.*\d).{8,}$ (ต้องใช้ PCRE - MySQL 8.0+ REGEXP)
Alphanumeric เท่านั้น^[A-Za-z0-9]+$
เริ่มต้นตัวอักษร ตามด้วยอะไรก็ได้^[A-Za-z].*$
ไม่มีอักขระพิเศษ^[A-Za-z0-9_]+$

หมายเหตุ MySQL Regex

  • MySQL ใช้ POSIX Regex (ไม่ใช่ PCRE) → ไม่รองรับ Lookahead (?=...) ในเวอร์ชันเก่า
  • MySQL 8.0+ ใช้ ICU Regex รองรับ Lookahead/Lookbehind
  • BINARY ทำให้ Case Sensitive (Default คือ Case Insensitive ตาม Collation)
  • RLIKE = Alias ของ REGEXP