资讯专栏INFORMATION COLUMN

关于“判断字符串是否含有非法字符”的思考

stefanieliang / 3192人阅读

摘要:项目案例项目中遇到一项任务禁止文件名含有中文字符空格等非法字符的文件,在持续整合中进行排查。因此更严谨的方法就是采用白名单实现,我们判断字符串是不是我们想要的,实现如下我们要求必须只能还有英文数字这些字符包含非法字符这样就万无一失了。

项目案例

项目中遇到一项任务:禁止文件名含有中文字符、空格等非法字符的文件,在circleci持续整合中进行排查。

那思路很简单呢,用中文字符正则表达式去检查项目下文件路径就好了不是吗?
那这样我们写出的代码是:

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

什么是黑白名单?针对本文案例,黑名单当然就是含中文字符、空格这些非法字符的字符串,而白名单就是我想要的,只包含英文、数字、下划线、英文句点等字符的字符串。
那上面的思路就是基于黑名单的实现咯。

但是,我们仔细审查一下,会发现基于黑名单的排查,是极易出现纰漏的,以上方法就不能识别中文全角的括"("和")"。
因此更严谨的方法就是采用白名单实现,我们判断字符串是不是我们想要的,实现如下:

//我们要求必须只能还有英文、数字、_、.、/、+、-、@、&这些字符
const regex = /^[A-Z0-9a-z()~_./+-@&]*$/;

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

这样就万无一失了。

思考

这种黑白名单的实现不仅能用在本文案例中,比如我们设计一个随机算法,但是该随机算法中需要把一些特殊情况排除掉的时候,我们的直接思维方式就是排除这些情况,那么能不能反过来直接从生成的角度,不生成这些情况了。

这样我们的代码就会变得健壮。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/99261.html

相关文章

  • 关于递归思考

    摘要:之前有接触过递归,看到别人写的递归函数的代码,好生羡慕,怎么就能写这么好呢我怎么就想不到这样写呢如此等等。 之前有接触过递归,看到别人写的递归函数的代码,好生羡慕,怎么就能写这么好呢?我怎么就想不到这样写呢?如此等等。 就拿fibonacci函数来说吧,一个普通的函数可能这样写: def fib(n): if n == 0: return 0 elif ...

    lyning 评论0 收藏0
  • 关于箭头函数思考

    摘要:关于箭头函数的思考自从有了箭头函数这个灵活的功能,现在写函数都习惯写成箭头函数格式然而如果不理解箭头函数的原理,滥用它也会造成很大的影响。等同于等同于如果箭头函数的代码块部分多于一条语句,就要使用大括号将它们括起来,并且使用语句返回。 关于箭头函数的思考 自从有了ES6箭头函数这个灵活的功能,现在写函数都习惯写成箭头函数格式 () => {} 然而如果不理解箭头函数的原理,滥用它也会造...

    ytwman 评论0 收藏0
  • vue开发微信商城项目总结之六--关于vuex思考

    先对项目进行一下简单的介绍 vue开发微信商城项目总结之一–项目介绍 项目开发初期,由于项目比较着急上线,前端的框架在选型上比较仓促,只是因为vue学习成本较低,就选了它,没有什么别的原因, 之前看过angular2一段时间,又趁着周末看了两天vue,就仓促开发,所以埋下了很多坑,项目(项目目前没有对游客开放,是2B2C的模式)上线后,回头填坑,发现了很多问题,因为之前一直是基于Jquery模式的...

    PrototypeZ 评论0 收藏0
  • 关于降低锁竞争程度------从奶爸角度思考

    摘要:关于降低锁的竞争程度从奶爸的角度思考题外话这篇文章的灵感来源于近日带娃耍。具体可参考定律,大致可理解为处理器的利用率与处理器数量和串行比例成反比,此外,在锁上发生竞争,导致上下文切换的开销增加,进而降低程序的性能。 关于降低锁的竞争程度------从奶爸的角度思考 题外话:这篇文章的灵感来源于近日带娃耍。 锁竞争带来的问题 在锁上发生竞争,导致串行操作花费的时间比例增加,进而降低程序...

    YacaToy 评论0 收藏0
  • 关于Flux,Vuex,Redux思考

    摘要:关于的思考是一种前端状态管理架构思想,专门解决软件的结构问题。他们给出了一些库用于实现的思想,并在的基础上做了一些改进。在这些框架里,当前最热门的莫过于和了。 关于Flux,Vuex,Redux的思考 Flux是一种前端状态管理架构思想,专门解决软件的结构问题。基于Flux的设计思想,出现了一批前端状态管理框架。他们给出了一些库用于实现Flux的思想,并在Flux的基础上做了一些改进。...

    jsbintask 评论0 收藏0

发表评论

0条评论

stefanieliang

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<