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

บังคับตรวจสอบข้อมูลด้วย Regular Expression ใน MySQL

ใช้ TRIGGER ก่อน INSERT (BEFORE INSERT) ร่วมกับ REGEXP เพื่อตรวจสอบรูปแบบข้อมูลก่อนบันทึก

ตัวอย่าง: ตรวจสอบรูปแบบเบอร์โทรศัพท์

1. สร้างตาราง

mysql> create table enforceDataUsingRegularExpression (
    -> yourPhoneNumber varchar(60)
    -> );

2. สร้าง Trigger

mysql> DELIMITER //
mysql> CREATE TRIGGER enforce_phone_check BEFORE INSERT ON enforceDataUsingRegularExpression
    -> FOR EACH ROW
    -> BEGIN
    ->     IF (NEW.yourPhoneNumber REGEXP '^(\\+?[0-9]{1,4}-)?[0-9]{3,10}$') = 0 THEN
    ->         SIGNAL SQLSTATE '33455' SET MESSAGE_TEXT = 'Your Phone Number is incorrect';
    ->     END IF;
    -> END //
mysql> DELIMITER ;

3. ทดสอบ INSERT ข้อมูลผิด

mysql> insert into enforceDataUsingRegularExpression values("+55242-64576");
ERROR 1644 (33455): Your Phone Number is incorrect

mysql> insert into enforceDataUsingRegularExpression values("+76-WD1232221");
ERROR 1644 (33455): Your Phone Number is incorrect

4. INSERT ข้อมูลถูกต้อง

mysql> insert into enforceDataUsingRegularExpression values("+55-1232221");
Query OK, 1 row affected (0.13 sec)

5. ตรวจสอบข้อมูล

mysql> select * from enforceDataUsingRegularExpression;
+-----------------+
| yourPhoneNumber |
+-----------------+
| +55-1232221     |
+-----------------+

อธิบาย Regular Expression

^(\+?[0-9]{1,4}-)?[0-9]{3,10}$
^                    เริ่มสตริง
(          )?        กลุ่มตัวเลือก (อาจมีหรือไม่มี)
\+?                  อาจมี + นำหน้า
[0-9]{1,4}           ตัวเลข 1-4 หลัก (รหัสประเทศ)
-                    เครื่องหมายขีด
[0-9]{3,10}          ตัวเลข 3-10 หลัก (เบอร์โทร)
$                    จบสตริง

MySQL 8.0.16+ ใช้ CHECK Constraint แทน

CREATE TABLE phone_check (
    phone VARCHAR(60),
    CONSTRAINT chk_phone_format CHECK (phone REGEXP '^(\\+?[0-9]{1,4}-)?[0-9]{3,10}$')
);

ประเภท Trigger ที่ใช้ได้

  • BEFORE INSERT - ตรวจสอบก่อนเพิ่ม
  • BEFORE UPDATE - ตรวจสอบก่อนแก้ไข
  • รวมได้: BEFORE INSERT, UPDATE