如何正則匹配亂碼?

語言: CN / TW / HK

曾經護網的時候,遇到過要寫一個正則,匹配文字中包含亂碼,當時精神狀態比較緊張,沒有寫出來,事後感覺非常尷尬,不過現在已經釋然了,趁著週末休息的時候,簡單研究了一下,以防未來還會遇到同樣的問題,測試樣例如下,包含:中文、英文、韓文、日文、中文標點符號、英文標點符號。

(中文)(¥)(abc+-*/)(한국인)(小さな日本)(��)(中文)(¥)(+-*/)(한국인)(小さな日本)

正則表示式 [ -~]+ ,可以匹配所有的可列印的ASCII碼字元,但是不能匹配中文、中文標點符號以及亂碼。

正則表示式 [^ -~]+ ,可以匹配所有中文、中文標點符號以及亂碼,也能匹配日文、韓文。

正則表示式 [\u4e00-\u9fa5]+ ,可以匹配所有的中文。

正則表示式 [\u3002\uff1f\uff01\uff0c\u3001\uff1b\uff1a\u201c\u201d\u2018\u2019\uff08\uff09\u300a\u300b\u3008\u3009\u3010\u3011\u300e\u300f\u300c\u300d\ufe43\ufe44\u3014\u3015\u2026\u2014\uff5e\ufe4f\uffe5\u00a5]+ ,可以匹配所有的中文標點符號。

正則表示式 [\u2E80-\u2FDF\u3040-\u318F\u31A0-\u31BF\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FFF\uA960-\uA97F\uAC00-\uD7FF]+ ,可以匹配所有的中日韓文,但是不包含標點符號。

所以,初略的構建一個匹配亂碼的正則表示式如下:

[^ -~\u2E80-\u2FDF\u3040-\u318F\u31A0-\u31BF\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FFF\uA960-\uA97F\uAC00-\uD7FF\u3002\u00a5\uff1f\uff01\uff0c\u3001\uff1b\uff1a\u201c\u201d\u2018\u2019\uff08\uff09\u300a\u300b\u3008\u3009\u3010\u3011\u300e\u300f\u300c\u300d\ufe43\ufe44\u3014\u3015\u2026\u2014\uff5e\ufe4f\uffe5]+

測試如下,效果良好:

如果想要匹配亂碼之後的所有文字,可以使用如下正則表示式:

[^ -~\u2E80-\u2FDF\u3040-\u318F\u31A0-\u31BF\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FFF\uA960-\uA97F\uAC00-\uD7FF\u3002\u00a5\uff1f\uff01\uff0c\u3001\uff1b\uff1a\u201c\u201d\u2018\u2019\uff08\uff09\u300a\u300b\u3008\u3009\u3010\u3011\u300e\u300f\u300c\u300d\ufe43\ufe44\u3014\u3015\u2026\u2014\uff5e\ufe4f\uffe5]+.*

如果想要匹配包含亂碼的整個文字,可以使用如下正則表示式:

[ -~\u2E80-\u2FDF\u3040-\u318F\u31A0-\u31BF\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FFF\uA960-\uA97F\uAC00-\uD7FF\u3002\u00a5\uff1f\uff01\uff0c\u3001\uff1b\uff1a\u201c\u201d\u2018\u2019\uff08\uff09\u300a\u300b\u3008\u3009\u3010\u3011\u300e\u300f\u300c\u300d\ufe43\ufe44\u3014\u3015\u2026\u2014\uff5e\ufe4f\uffe5]*[^ -~\u2E80-\u2FDF\u3040-\u318F\u31A0-\u31BF\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FFF\uA960-\uA97F\uAC00-\uD7FF\u3002\u00a5\uff1f\uff01\uff0c\u3001\uff1b\uff1a\u201c\u201d\u2018\u2019\uff08\uff09\u300a\u300b\u3008\u3009\u3010\u3011\u300e\u300f\u300c\u300d\ufe43\ufe44\u3014\u3015\u2026\u2014\uff5e\ufe4f\uffe5]+.*

如果文字中不存在亂碼,則測試不通過

網路安全任重道遠,洗洗睡吧~