成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

關(guān)于“判斷字符串是否含有非法字符”的思考

stefanieliang / 3382人閱讀

摘要:項(xiàng)目案例項(xiàng)目中遇到一項(xiàng)任務(wù)禁止文件名含有中文字符空格等非法字符的文件,在持續(xù)整合中進(jìn)行排查。因此更嚴(yán)謹(jǐn)?shù)姆椒ň褪遣捎冒酌麊螌?shí)現(xiàn),我們判斷字符串是不是我們想要的,實(shí)現(xiàn)如下我們要求必須只能還有英文數(shù)字這些字符包含非法字符這樣就萬無一失了。

項(xiàng)目案例

項(xiàng)目中遇到一項(xiàng)任務(wù):禁止文件名含有中文字符、空格等非法字符的文件,在circleci持續(xù)整合中進(jìn)行排查。

那思路很簡(jiǎn)單呢,用中文字符正則表達(dá)式去檢查項(xiàng)目下文件路徑就好了不是嗎?
那這樣我們寫出的代碼是:

const str = "我有中文字符";
if(/.*[u4e00-u9fa5]+.*$/.test(str)){ 
    throw new Error("不能含有漢字");
} 
黑名單和白名單

什么是黑白名單?針對(duì)本文案例,黑名單當(dāng)然就是含中文字符、空格這些非法字符的字符串,而白名單就是我想要的,只包含英文、數(shù)字、下劃線、英文句點(diǎn)等字符的字符串。
那上面的思路就是基于黑名單的實(shí)現(xiàn)咯。

但是,我們仔細(xì)審查一下,會(huì)發(fā)現(xiàn)基于黑名單的排查,是極易出現(xiàn)紕漏的,以上方法就不能識(shí)別中文全角的括"("和")"。
因此更嚴(yán)謹(jǐn)?shù)姆椒ň褪遣捎冒酌麊螌?shí)現(xiàn),我們判斷字符串是不是我們想要的,實(shí)現(xiàn)如下:

//我們要求必須只能還有英文、數(shù)字、_、.、/、+、-、@、&這些字符
const regex = /^[A-Z0-9a-z()~_./+-@&]*$/;

if (!regex.test(path)) {
    throw new Error("包含非法字符");
}

這樣就萬無一失了。

思考

這種黑白名單的實(shí)現(xiàn)不僅能用在本文案例中,比如我們?cè)O(shè)計(jì)一個(gè)隨機(jī)算法,但是該隨機(jī)算法中需要把一些特殊情況排除掉的時(shí)候,我們的直接思維方式就是排除這些情況,那么能不能反過來直接從生成的角度,不生成這些情況了。

這樣我們的代碼就會(huì)變得健壯。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/99261.html

相關(guān)文章

  • 關(guān)于遞歸思考

    摘要:之前有接觸過遞歸,看到別人寫的遞歸函數(shù)的代碼,好生羨慕,怎么就能寫這么好呢我怎么就想不到這樣寫呢如此等等。 之前有接觸過遞歸,看到別人寫的遞歸函數(shù)的代碼,好生羨慕,怎么就能寫這么好呢?我怎么就想不到這樣寫呢?如此等等。 就拿fibonacci函數(shù)來說吧,一個(gè)普通的函數(shù)可能這樣寫: def fib(n): if n == 0: return 0 elif ...

    lyning 評(píng)論0 收藏0
  • 關(guān)于箭頭函數(shù)思考

    摘要:關(guān)于箭頭函數(shù)的思考自從有了箭頭函數(shù)這個(gè)靈活的功能,現(xiàn)在寫函數(shù)都習(xí)慣寫成箭頭函數(shù)格式然而如果不理解箭頭函數(shù)的原理,濫用它也會(huì)造成很大的影響。等同于等同于如果箭頭函數(shù)的代碼塊部分多于一條語句,就要使用大括號(hào)將它們括起來,并且使用語句返回。 關(guān)于箭頭函數(shù)的思考 自從有了ES6箭頭函數(shù)這個(gè)靈活的功能,現(xiàn)在寫函數(shù)都習(xí)慣寫成箭頭函數(shù)格式 () => {} 然而如果不理解箭頭函數(shù)的原理,濫用它也會(huì)造...

    ytwman 評(píng)論0 收藏0
  • vue開發(fā)微信商城項(xiàng)目總結(jié)之六--關(guān)于vuex思考

    先對(duì)項(xiàng)目進(jìn)行一下簡(jiǎn)單的介紹 vue開發(fā)微信商城項(xiàng)目總結(jié)之一–項(xiàng)目介紹 項(xiàng)目開發(fā)初期,由于項(xiàng)目比較著急上線,前端的框架在選型上比較倉(cāng)促,只是因?yàn)関ue學(xué)習(xí)成本較低,就選了它,沒有什么別的原因, 之前看過angular2一段時(shí)間,又趁著周末看了兩天vue,就倉(cāng)促開發(fā),所以埋下了很多坑,項(xiàng)目(項(xiàng)目目前沒有對(duì)游客開放,是2B2C的模式)上線后,回頭填坑,發(fā)現(xiàn)了很多問題,因?yàn)橹耙恢笔腔贘query模式的...

    PrototypeZ 評(píng)論0 收藏0
  • 關(guān)于降低鎖競(jìng)爭(zhēng)程度------從奶爸角度思考

    摘要:關(guān)于降低鎖的競(jìng)爭(zhēng)程度從奶爸的角度思考題外話這篇文章的靈感來源于近日帶娃耍。具體可參考定律,大致可理解為處理器的利用率與處理器數(shù)量和串行比例成反比,此外,在鎖上發(fā)生競(jìng)爭(zhēng),導(dǎo)致上下文切換的開銷增加,進(jìn)而降低程序的性能。 關(guān)于降低鎖的競(jìng)爭(zhēng)程度------從奶爸的角度思考 題外話:這篇文章的靈感來源于近日帶娃耍。 鎖競(jìng)爭(zhēng)帶來的問題 在鎖上發(fā)生競(jìng)爭(zhēng),導(dǎo)致串行操作花費(fèi)的時(shí)間比例增加,進(jìn)而降低程序...

    YacaToy 評(píng)論0 收藏0
  • 關(guān)于Flux,Vuex,Redux思考

    摘要:關(guān)于的思考是一種前端狀態(tài)管理架構(gòu)思想,專門解決軟件的結(jié)構(gòu)問題。他們給出了一些庫用于實(shí)現(xiàn)的思想,并在的基礎(chǔ)上做了一些改進(jìn)。在這些框架里,當(dāng)前最熱門的莫過于和了。 關(guān)于Flux,Vuex,Redux的思考 Flux是一種前端狀態(tài)管理架構(gòu)思想,專門解決軟件的結(jié)構(gòu)問題?;贔lux的設(shè)計(jì)思想,出現(xiàn)了一批前端狀態(tài)管理框架。他們給出了一些庫用于實(shí)現(xiàn)Flux的思想,并在Flux的基礎(chǔ)上做了一些改進(jìn)。...

    jsbintask 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<