MySQL-এ ডেটা ইনসার্টের আগে রেগুলার এক্সপ্রেশন দিয়ে ভ্যালিডেশন করতে BEFORE INSERT ট্রিগার ব্যবহার করা হয়।
উদাহরণ: ফোন নম্বর ভ্যালিডেশন
টেবিল তৈরি:
mysql> CREATE TABLE enforceDataUsingRegularExpression (
-> yourPhoneNumber VARCHAR(60)
-> );
ট্রিগার তৈরি (ফোন ফরম্যাট: +কান্ট্রিকোড-নম্বর):
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 //
Query OK, 0 rows affected (0.16 sec)
mysql> DELIMITER ;
ভুল ফোন নম্বর ইনসার্ট করলে এরর:
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
সঠিক ফোন নম্বর ইনসার্ট:
mysql> INSERT INTO enforceDataUsingRegularExpression VALUES("+55-1232221");
Query OK, 1 row affected (0.13 sec)
ফলাফল:
mysql> SELECT * FROM enforceDataUsingRegularExpression;
+-----------------+ | yourPhoneNumber | +-----------------+ | +55-1232221 | +-----------------+
ব্যাখ্যা: রেগেক্স ^(\\+?[0-9]{1,4}-)?[0-9]{3,10}$ মানে: অপশনাল + এবং ১-৪ ডিজিট কান্ট্রি কোড उसकेপর হাইফেন, তারপর ৩-১০ ডিজিট নম্বর। SIGNAL SQLSTATE দিয়ে কাস্টম এরর মেসেজ দেওয়া হয়েছে। আপডেটের জন্যও BEFORE UPDATE ট্রিগার লাগবে।