怎麼快速對DB裡的所有email進行校驗

2022-02-22 10:58:09 字數 1448 閱讀 2584

由於業務上的需求,重新改寫了校驗email的正規表示式,同時db裡又遷移了其他資料庫的資料,現在需要重新對db裡的所有email再校驗一次,以排除掉不合法的email。

db裡的資料很多,手動去乙個個校驗的做法顯然是不靠譜的,這種機械的重複性操作,自然是要用程式來解決才是最簡易的。

首先是將db裡所有的email都拼接成乙個字串,由於用的是postgresql,所以直接使用現有的字串拼接函式string_agg()

具體用法如下:

select string_agg(email, ';') from cnt_user where is_latest;
大意就是拿到所有的最新版本的使用者的email,以';'作為間隔符,將這些email拼接起來,得到的結果就是:[email protected];[email protected]...

自己寫乙個測試類,把剛剛db查詢到的字串複製進來,通過string類的split()將其進行切割成乙個string陣列,然後遍歷該陣列,通過正規表示式去乙個個校驗,將那些校驗不通過的email給列印出來。

注意:這種方法不適用於email數量特別多的情況,如果string陣列的大小超過3億多,會報記憶體溢位outofmemoryerror的錯誤。

大概的思路如下:

/** regex for single emailvalidator */

public static final string single_email_regex = "(?:(?:[a-za-z0-9\\-_@!#$%&'*+/=?^`~]|(?:\\\\[\\x00-\\xff]?)|"

+ "(?:\"[\\x00-\\xff]*\"))+(?:\\.(?:(?:[a-za-z0-9\\-_@!#$%&'*+/=?^`~])|(?:\\\\[\\x00-\\xff]?)|"

+ "(?:\"[\\x00-\\xff]*\"))+)*)@(?:(?:[a-za-z0-9](?:[a-za-z0-9-]*[a-za-z0-9])?\\.)+"

+ "(?:(?:[a-za-z0-9]*[a-za-z][a-za-z0-9]*)(?:[a-za-z0-9-]*[a-za-z0-9])?))";

public static final pattern single_email_regex_pattern = pattern.compile(single_email_regex);

...final string emailstring = "******"; //db裡通過函式拼接起來的email字串

final string emails = emailstring.split(";");

for (final string email : emails)

}

如果不合法的email有很多的話,還可以通過poi將這些email輸出到乙個文件中。

python裡 怎麼打 python裡的 怎麼輸入

python去重函式是什麼 用python寫溫度轉換 python中的 就是math.pi變數 它被包含在標準庫中,在你試圖自己計算它之前,應該先去匯入math庫,才能呼叫math.pi方法 import sys import math defmain ar if len ar 1 sys.exit...

怎麼對ORACLE裡的CLOB欄位進行模糊查詢

select b.from oss service log a left join oss service log detail b on a.pk log b.pk log where a.pk service nc.ws.oss.bd.iusergroupopenservice and b.lo...

mysql的db檔案怎麼開啟?

開啟mysql db檔案的方法 1 在電腦安裝sqlitedeveloper軟體 2 點選開啟該軟體,可以看到程式左邊的 資料庫列表 3 選擇乙個 db 檔案,把該db檔案直接拖拉程序式視窗,會顯示 註冊資料庫 點選 確定 即可。開啟mysql db檔案的方法 1 在電腦安裝sqlitedevelo...