MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

MySQLで正規表現によるデータチェックは可能?トリガーを使った電話番号形式の検証方法

はい、MySQLでは正規表現(REGEXP)を活用することで、データの整合性チェックを実施できます。具体的な手順としては、まずテーブルを作成し、その後にBEFORE INSERTトリガーを定義します。本記事では、例として電話番号のフォーマット検証を行う方法を解説します。

1. テーブルの作成

まず、電話番号を格納するためのテーブルを作成します。作成用のクエリは以下のとおりです。

mysql> CREATE TABLE enforceDataUsingRegularExpression
    -> (
    -> yourPhoneNumber VARCHAR(60)
    -> );
Query OK, 0 rows affected (0.59 sec)

2. トリガーの作成

次に、INSERT実行前にデータを検証するBEFORE INSERTトリガーを作成します。正規表現にマッチしない電話番号が挿入された場合、SIGNAL SQLSTATEによってエラーを発生させ、登録を阻止します。

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 ;

この正規表現 '^(\+?[0-9]{1,4}-)?[0-9]{3,10}$' は、「先頭に任意の国コード(+記号付きの1〜4桁の数字)とハイフンがあってもよく、その後に3〜10桁の数字が続く」形式を表しています。

3. 誤ったデータ挿入時の動作確認

それでは、実際にレコードを挿入して、正規表現によるデータチェックが機能するか確認してみましょう。まずは不正な形式のデータを挿入します。

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. 正しいデータの挿入

続いて、正しい形式の電話番号を挿入してみます。

mysql> INSERT INTO enforceDataUsingRegularExpression VALUES("+55-1232221");
Query OK, 1 row affected (0.13 sec)

5. 登録結果の確認

最後に、SELECT文ですべてのレコードを表示して結果を確認しましょう。

mysql> SELECT * FROM enforceDataUsingRegularExpression;

実行結果は以下のとおりです。

+-----------------+
| yourPhoneNumber |
+-----------------+
| +55-1232221     |
+-----------------+
1 row in set (0.00 sec)

まとめ

このように、MySQLではトリガーとREGEXP演算子を組み合わせることで、アプリケーション側のコードに頼らずデータベースレベルで入力値の妥当性を強制できます。電話番号以外にも、メールアドレスや郵便番号など、さまざまなフォーマット検証に応用できるので、ぜひ活用してみてください。

  1. Pythonの正規表現を使って文字列から数字のみを抽出・マッチングする方法

    Pythonでは、標準ライブラリの re モジュールを使うことで、正規表現によるパターンマッチングが簡単に行えます。文字列から「数字のみ」を取り出したい場合は、メタ文字 \d(任意の1桁の数字に一致)を使用します。ここでは、代表的な2つの方法——re.search() と re.findall() を使った例を紹介します。なお、コードはPython 3系の記法に準拠しています。例1:re.search() で最初に見つかった数字の並びを取得する次のコードは、指定した文字列の中から最初に出現する連続した数字(1桁以上)を検索し、マッチオブジェクトとして返します。import re m = re

  2. 【Python】正規表現を使って文字列内の単語をマッチ・抽出する方法

    次のコードは、指定された文字列の中から「meeting」という単語を抽出します。ここでは肯定の先読み(look-ahead)と肯定の後読み(look-behind)アサーションを使用しています。これにより、単語を囲む文字の存在を条件として考慮しつつ、その文字自体はマッチ結果に含めないようにできます。コード例import re s = https://www.google.com/meeting_agenda_minutes.html result = re.findall(r(?<=[\W_])meeting(?=[\W_]), s) print(result)出力[meeting]パ