正则表达式的使用

一、限定密码长度和保密程度的正则

  至少8位长度,至少使用数字、字母、特殊字符中的两种:^(?=.*[a-zA-Z0-9])(?=.*[a-zA-Z\W_])(?=.*[0-9\W]).{8,}$

  注:\w包含数字、字母、下划线,\W就不含下划线

    数字:[0-9]或\d

    字母:[a-zA-Z]

    字符:[\W_]

  解析:

    1、(?=pattern)的用法:表达式pattern只作为一个查询条件,类似于判断,并不是真正的表达式对字符串的匹配。

      例如:判断字符串是否包含001,匹配test001的正则表达式,应是:^test(?=001|002)001$,或^test(?=001|002).*$,即表达式要满足字符串的数量和字符类型的要求。

      

    2、当有多个(?=pattern1)(?=pattern2),表达式应但同时满足,即达到与的关系。但是,因为每个单独的子表达式里是或的关系,所以只需要满足每个表达式里的其中之一就行。

      本例中,既是:第一表达式字母数字集合,则表达式要么有字母有么有数字,至少一个;但同时也要满足第二个表达式字母-非数字、字母集合;并且满足第三个表达式数字-非字母数字集合。

      三个表达式相互影响,则达到目的-----至少两种字符。如果第一个子表达式有两种字符则已经满足我们的需求,同时也满足了第二、第三个子表达式;如何第一个第一个子表达式的匹配度只有两者的其中之一字符,字母或数字,那么,肯定不满足第二或第三个表达式,字符串将无法检测通过,结果既是false。

 

    3、长度的限定:因为(?=pattern)只是个判断条件,所以正真匹配的正则表达式是:.{8,},所以可以通过该子表达式进行长度限制。

 

    4、(?=.*[a-zA-Z\W_]),该子表达式中的.*的解读:由于该表达式的每个子表达式都是从头开始匹配(具体原因不做细述),所以当第一个字符无法满足该子表达式的匹配条件时即会产生false,所以必须加上.*来跳过不满足的字符。

 

    5、本例的条件是:数字、字母、特殊字符,三种中至少满足两种,用数学中的排列组合方式理解它。就有:在三种不同方式中任选两种的所有组合,将每种组合写出来,应是c(3,2),结果是3,每种组合都包含两种类型的密码。这种写法最终会因为标题2中的方式满足密码强度的要求;如果需要指定密码必须满足所有条件,而不是满足任意的写法:^(?=.*\d)(?=.*[a-zA-z])(?=.*[\W_]).{8,}$,这种的组合应是:三种不同方式选取任意一种进行组合,应是:c(3,1),结果也是3中组合,每种组合只包含一种密码;如果需要三种满足任意一种的写法:^(?=.*[a-zA-Z\d\W_]).{8,}$,这种组合应是:三种不同方式选取全部条件进行组合,应是:c(3,3)结果只有一种,每种组合包含全部密码。

    三种密码方式,总结一下:

          至少任意一种:^(?=[a-zA-Z\d\W_]).{8,}$  (一种的方式不需要加.*)

 

          至少任意两种:^(?=.*[a-zA-Z0-9])(?=.*[a-zA-Z\W_])(?=.*[0-9\W_]).{8,}$

 

          必须全部三种:^(?=.*\d)(?=.*[a-zA-z])(?=.*[\W_]).{8,}$

 

 

    6、如果需要在四种密码方式中任意满足几种的写法是什么,将字母中的大小写看成两种密码方式。在此,我们类比三种密码方式的写法,使用组合的方式的推导。首先比较容易想到的:必须满足四种中全部4种的组合方式,应该是c(4,1)=4,满足四种的任意1种的组合方式,应该是c(4,4)=1。以此来推导,那么满足四种中的任意3种的组合方式,应该是c(4,2)=6,满足四种中2种的组合方式,应该是c(4,3)=4。

      具体的写法:

          至少任意一种:^(?=[a-zA-Z\d\W_]).{8,}$  (跟三种一样)

          至少任意两种:^(?=.*[\da-zA-Z])(?=.*[\da-z\W_])(?=.*[\dA-Z\W_])(?=.*[a-zA-Z\W_]).{8,}$

          至少任意三种:^(?=.*[\da-z])(?=.*[\dA-Z])(?=.*[\d\W_])(?=.*[A-Z\W_])(?=.*[a-zA-Z])(?=.*[a-z\W_]).{8,}$

          必须全部四种:^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[\W_]).{8,}$

    

    7、按照这种思路,如果想写两张密码方式的组合,或者更多中的密码方式的组合,只需要按照规律即可。不过,四种密码应该已经是常用最多的了。

    

    

转载于:https://www.cnblogs.com/whalesea/p/10839946.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
中文名: 正则表达式经典实例 原名: Regular Expression Cookbook 作者: (美)高瓦特斯(Goyvaerts,J.) (美)利维森(Levithan,S.)译者: 郭耀 资源格式: PDF 版本: 扫描版 出版社: 人民邮电出版社书号: 9787115228321发行时间: 2010年06月01日 地区: 大陆 语言: 简体中文 简介: 编辑推荐 每个程序员都会遇到需要使用正则表达式的情况,但是要用好正则表达式却并不容易。本书提供了100多个实例,以帮助读者使用正则表达式处理数据和文本。即使有经验的用户也经常会遇到性能不佳、误报、漏报等让人挠头的错误,本书对于如何使用正则表达式来解决一些常见的问题给出了按部就班的解决方案,其中包括c#、Java、JavaScript、Perl、PHP、Python、Ruby和VB.NET的实例。   本书主要包括以下内容:   通过一个精练的教程理解正则表达式的基本原理和技巧;   在不同的编程语言和脚本语言中有效使用正则表达式;   学习如何对输入进行合法性检查和格式化;   处理单词、文本行、特殊字符和数值;   学习如何在URL、路径、标记语言和数据交换中使用正则   表达式;   学习更高深的正则表达式特性中的微妙之处;   理解在不同语言中正则表达式的APl、语法和行为之间的   区别;   创建更好的正则表达式来满足个性化的需求。 内容简介 本书讲解了基于8种常用的编程语言使用正则表达式的经典实例。书中提供了上百种可以在实战中使用的实例,以帮助读者使用正则表达式来处理数据和文本。对于如何使用正则表达式来解决性能不佳、误报、漏报等常见的错误以及完成一些常见的任务,本书给出了涉及基于C#、Java、JavaScript、Perl、PHP、Python、Ruby和VB.NET等编程语言的解决方案。   本书的读者对象是对正则表达式感兴趣的软件开发人员和系统管理员。本书旨在教会读者很多新的技巧以及如何避免语言特定的陷阱,读者可以通过本书提供的实例解决方案库来解决实践中的复杂问题。 作者简介 Jan Goyvaerts领导着Just Great Software公司,他在这个公司设计和开发了一些最流行的正则表达式软件。他的产品中包括RegexBuddy,世界上唯一可以模拟l5种正则表达式流派特性的正则表达式编辑器,以及PowerGREP,Microsoft Windows平台上功能最强大的9rep工具。 目录: 第1章 正则表达式简介 1.1 正则表达式的定义 1.2 使用正则表达式的工具 第2章 正则表达式的基本技巧 2.1 匹配字面文本 2.2 匹配不可打印字符 2.3 匹配多个字符之一 2.4 匹配任意字符 2.5 匹配文本行起始和/或文本行结尾 2.6 匹配整个单词 2.7 Unicode代码点、属性、区块和脚本 2.8 匹配多个选择分支之一 2.9 分组和捕获匹配中的子串 2.10 再次匹配先前匹配的文本 2.11 捕获和命名匹配子串 2.12 把正则表达式的一部分重复多次 2.13 选择最小和最大重复次数 2.14 消除不必要的回溯 2.15 避免重复逃逸 2.16 检查一个匹配,但不添加到整体匹配中 2.17 根据条件匹配两者之一 2.18 向正则表达式中添加注释 2.19 在替代文本中添加字面文本 2.20 在替代文本中添加正则匹配 2.21 把部分的正则匹配添加到替代文本中 2.22 把匹配上下文插入到替代文本中 第3章 使用正则表达式编程 3.1 在源代码中使用字面正则表达式 3.2 导入正则表达式函数库 3.3 创建正则表达式对象 3.4 设置正则表达式选项 3.5 检查是否可以在目标字符串中找到匹配 3.6 检查正则表达式能否整个匹配目标字符串 3.7 获取匹配文本 3.8 决定匹配的位置和长度 3.9 获取匹配文本的一部分 3.10 获取所有匹配的列表 3.11 遍历所有匹配 3.12 在过程代码中对匹配结果进行验证 3.13 在另一个匹配中查找匹配 3.14 替换所有匹配 3.15 使用匹配的子串来替换匹配 3.16 使用代码中生成的替代文本来替换匹配 3.17 替换另一个正则匹配中的所有匹配 3.18 替换另一个正则匹配之间的所有匹配 3.19 拆分字符串 3.20 拆分字符串,保留正则匹配 3.21 逐行查找 第4章 合法性验证和格式化 4.1 E-mail地址的合法性验证 4.2 北美电话号码的合法性验证和格式化 4.3 国际电话号码的合法性验证 4.4 传统日期格式
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值