關於「判斷字串是否含有非法字元」的思考

2021-09-13 02:58:22 字數 737 閱讀 1534

專案中遇到一項任務:禁止檔名含有中文字元、空格等非法字元的檔案,在circleci持續整合中進行排查。

那思路很簡單呢,用中文字元正規表示式去檢查專案下檔案路徑就好了不是嗎?

那這樣我們寫出的**是:

const str = '我有中文字元';

if(/.*[\u4e00-\u9fa5]+.*$/.test(str))

什麼是黑白名單?針對本文案例,黑名單當然就是含中文字元、空格這些非法字元的字串,而白名單就是我想要的,只包含英文、數字、下劃線、英文句點等字元的字串。

那上面的思路就是基於黑名單的實現咯。

但是,我們仔細審查一下,會發現基於黑名單的排查,是極易出現紕漏的,以上方法就不能識別中文全形的括"("和")"。

因此更嚴謹的方法就是採用白名單實現,我們判斷字串是不是我們想要的,實現如下:

//我們要求必須只能還有英文、數字、_、.、/、+、-、@、&這些字元

const regex = /^[a-z0-9a-z()~_./+-@&]*$/;

if (!regex.test(path))

這樣就萬無一失了。

這種黑白名單的實現不僅能用在本文案例中,比如我們設計乙個隨機演算法,但是該隨機演算法中需要把一些特殊情況排除掉的時候,我們的直接思維方式就是排除這些情況,那麼能不能反過來直接從生成的角度,不生成這些情況了。

這樣我們的**就會變得健壯。

Oracle 判斷字串是否含有漢字

我們知道在資料庫中,漢字占用兩個位元組,而其他字元占用乙個位元組,這樣通過兩個函式的比較就可以判斷出是否有中文,length計算字元長度,lengthb計算位元組長度 select lengthb a愛中國 length a愛中國 from dual 第乙個返回7,第二個返回4,這樣就可以判斷有中文...

判斷字串是否為空,是否含有表情

viewcontroller.m testdemo created by 趙詣 on 16 1 27.import viewcontroller.h inte ce viewcontroller end implementation viewcontroller void viewdidload 判...

VBA判斷字串中是否含有漢字

假設字串儲存在strchk變數中,那麼只需要判斷 len strchk 與 lenb strconv strchk,vbfromunicode 是否相等,即可知道該變數中是否存在漢字。理由如下 vba中預設英文本串都是unicode,雙位元組,如果轉化為vbfromunicode,英文本元 就變成單...