由於業務上的需求,重新改寫了校驗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...