日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

java邮箱地址正则表达式_Java 中用正则表达式修改 Email 地址

發布時間:2023/12/10 java 60 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java邮箱地址正则表达式_Java 中用正则表达式修改 Email 地址 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

需求

系統中有一列會用來存儲 email 地址,現在需要對輸入的字符串進行過濾,

要求是,把無效的地址過濾掉。有一些需要說明的是

這些地址是通過圖像識別得到的,有些是用戶自己輸入的

已有歷史記錄已經存在了臟數據,需要替換

這個地址是識別出來的,不是用戶帳號和聯系信息這樣的關鍵數據。所以寧愿相信用戶是手誤多錄入的字符,或是機器識別把不該記錄的字符當成 Email 的一部分了

測試字符串:

String[] arrEmailAddr = new String[]{

"\uD83D\uDC02abc123@cc.cc",

"A78=B[咔嚓]C??2345@cc.cc",

"abc\uD83C\uDF32'sdfsd@sdfsd.·」cc",

"a·「d(*^@cc.cc",

"asl'''fgjk&^*'\"234@sgd_slgkj-sdfsd.com"

};

方案和坑

本以為用了很多年正則,已經很熟練了,應該信手拈來,沒想到實際操作時居然遇到那么多坑

首先可以確定的是,使用 Java 的 ReplaceAll 是沒錯了

網上廣為流傳的神 Pattern

// 清除掉所有特殊字符

String regEx="[`~!@#$%^&*()+=|{}':;',\\[\\].<>/?~!@#¥%……&*()——+|{}【】‘;:”“’。,、?]";

Pattern p = Pattern.compile(regEx);

Matcher m = p.matcher(str);

return m.replaceAll("").trim();

首先,我是十分討厭這種窮舉法的;其次,對層出不窮的特殊字符控制不足,比如全角空格、顏文字等等。

pass

按照 Email 的格式嚴格匹配,把不符合 Email 格式的直接替換掉

是個比較徹底的方法,但是,實際操作前,發現有這樣一些讓人無語的臟數據:

+--------+----------------------------------------------------+

| id | email |

+--------+----------------------------------------------------+

| 66898 | 信箱三-mail:zhixxxxxxxxxx@163.com |

| 115764 | 郵箱:1xxxxxx890@qq.com |

| 513557 | M0:svxxxxxx@vip.163.c0m |

| 708165 | 郵箱:lixxxxxxxx@zjlcwg.com |

| 966373 | Mail:chenxxxxxx@ch-jht.com |

+--------+----------------------------------------------------+

5 rows in set (0.05 sec)

這些記錄不在少數,肯定需要保留。

所以,問題還是回到 替換 這條思路上來

使用白名單

實際上只能這么做,難點和坑也在于這里,先列幾個我犯的錯誤示例:

String regEx = "/[0-9a-z]/"; // 這是一個正向測試,不過測試本身就有問題,Java里面不是用 “/” 來標識兩端的

String regEx="[^0-9][^a-z][^_]"; // 這樣會順序匹配,在每個匹配組上干掉了其他組的合法字符

String regEx="(\\W|@|-....)"; // 匹配到第一個之后,就直接過濾掉了,后面的其他字符不會被保留

String regEx="^[a-z0-9-_@]"; // ^ 字符匹配的是字符串開始的地方,無法作為 “非” 來使用,加轉譯就更不對了

String regEx="[^0-9a-z.-_@]"; // 這個就坑大了,自己看結果:

/** -----

abc123@cc.cc

A78=B[]C2345@cc.cc

abcsdfsd@sdfsd.cc

ad^@cc.cc

aslfgjk^234@sgd_slgkjsdfsd.com

---- */

// 問題在于,“.” 這個字符,在里面會被認為是任意字符的匹配,對反斜線“免疫”

最終結果

測試字符

見文首

正則源碼

正如上文說的,“.” 字符必須放末位

// 與下面的等價 String regEx="[^0-9a-z-_@.]";

String regEx="[^\\w-@.]";

輸出

abc123@cc.cc

782345@cc.cc

abcsdfsd@sdfsd.cc

ad@cc.cc

aslfgjk234@sgd_slgkj-sdfsd.com

總結

以上是生活随笔為你收集整理的java邮箱地址正则表达式_Java 中用正则表达式修改 Email 地址的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。