一文详解密码的正则表达式写法

目录
  • 密码的正则表达式如何来写?
  • 最佳解决思路
  • 次佳解决思路
  • 第三种解决思路
  • 第四种思路
  • 第五种思路
  • 第六种思路
  • 第七种思路
  • 第八种思路
  • 第九种思路
  • 第十种思路

正则表达式:密码必须至少包含八个字符、至少包含一个数字、小写和大写的字母以及特殊字符

密码的正则表达式如何来写?

我需要一个正则表达式来检查密码:

密码至少包含八个字符、至少包含一个数字、同时包含小写字母和大写字母以及特殊字符,例如#?!)

不能是旧密码或包含用户名,"password""websitename"

这里是我的验证表达式,用于限制:八个字符,包括一个大写字母,一个小写字母和一个数字或特殊字符。

(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$"

那么,如何写一个正则,限制密码必须是八个字符,包括一个大写字母,一个特殊字符和字母数字字符?

最佳解决思路

至少八个字符,至少一个字母和一个数字:

"^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d]{8,}$"

至少八个字符,至少一个字母,一个数字和一个特殊字符:

"^(?=.*[A-Za-z])(?=.*\d)(?=.*[$@$!%*#?&])[A-Za-z\d$@$!%*#?&]{8,}$"

最少八个字符,至少一个大写字母,一个小写字母和一个数字:

"^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z\d]{8,}$"

至少八个字符,至少一个大写字母,一个小写字母,一个数字和一个特殊字符:

"^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[$@$!%*?&])[A-Za-z\d$@$!%*?&]{8,}"

最少八个最多十个字符,至少一个大写字母,一个小写字母,一个数字和一个特殊字符:

"^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[$@$!%*?&])[A-Za-z\d$@$!%*?&]{8,10}"

次佳解决思路

可以使用这个正则表达式:

^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[#?!@$%^&*-]).{8,}$

这个正则表达式将强制执行这些规则:

  • 至少一个大写字母English letter(?=.*?[A-Z])
  • 至少一个小写英文字母,(?=.*?[a-z])
  • 至少有一位数字,(?=.*?[0-9])
  • 至少有一个特殊字符,(?=.*?[#?!@$%^&*-])
  • 最小八个长度.{8,}(带锚)

第三种解决思路

正则表达式没有AND运算符,所以编写匹配有效的密码的正则表达式相当困难,特别是当有效性被某些东西AND别的东西等定义时...

但是,正则表达式确实有一个OR运算符,所以只需应用DeMorgan的定理,并编写一个与无效密码相匹配的正则表达式:

任何少于八个字符或任何没有数字或任何没有大写字母或任何没有小写字母或任何没有特殊字符的任何字符串。

所以:

^(.{0,7}|[^0-9]*|[^A-Z]*|[^a-z]*|[a-zA-Z0-9]*)$

如果能匹配上这个正则表达式的话,这是一个无效的密码。

第四种思路

对最佳答案的一个小小的改进:由于特殊字符仅限于键盘中的特殊字符,因此可用于表达任何特殊字符:

^(?=.*?[A-Z])(?=(.*[a-z]){1,})(?=(.*[\d]){1,})(?=(.*[\W]){1,})(?!.*\s).{8,}$

这个正则表达式将强制执行这些规则:

  • 至少一个大写英文字母
  • 至少一个小写英文字母
  • 至少一位数字
  • 至少一个特殊字符
  • 最少八个字符

第五种思路

在我的环境中,按照最佳答案来做,我遇到了一些困难。例如,对字符如;[验证失败。我不想白名单列举我的特殊字符,所以我用[^\w\s]作为测试 - 只是放置匹配非字符(包括数字)和非空格字符。总而言之,这个做法对我来说比较有效...

  • 至少8字符
  • 至少1数字字符
  • 至少1小写字母
  • 至少1大写字母
  • 至少1特殊字符
/^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[^\w\s]).{8,}$/

JSFiddle Link - 简单的涵盖各种情况的demo

第六种思路

导入JavaScript文件jquery.validate.min.js

就可以使用如下方法:

$.validator.addMethod("pwcheck", function (value) {
    return /[\@\#\$\%\^\&\*  \_\+\!]/.test(value) && /[a-z]/.test(value) && /[0-9]/.test(value) && /[A-Z]/.test(value)
});

这个正则表达式可以表达:

  • 至少一张大写英文字母
  • 至少一个小写英文字母
  • 至少一位数字
  • 至少一个特殊字符

第七种思路

满足如下条件:

  • 最少六个字符
  • 至少有一个大写字符
  • 至少一个小写字符
  • 至少一个特殊字符

正则表达式:

"/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[$@$!%*?&.])[A-Za-z\d$@$!%*?&.]{6, 20}/"

满足如下条件,且有可选特殊字符:

  • 至少一个特殊字符
  • 至少一个数字
  • 特殊字符是可选的
  • 最少6个字符,最多16个字符

正则表达式:

"/^(?=.*\d)(?=.*[a-zA-Z]).{6,20}$/"

如果不需要最小和最大条件,可以删除.{6, 16}

  • 6是最小字符数限制
  • 20是最大字符限制
  • ?=表示匹配表达式

第八种思路

需要满足的条件,以及对应的正则表达式:


Conditions: 1] Min 1 uppercase letter.
            2] Min 1 lowercase letter.
            3] Min 1 special character.
            4] Min 1 number.
            5] Min 8 characters.
            6] Max 30 characters.

Regex: /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[#$@!%&*?])[A-Za-z\d#$@!%&*?]{8,30}$/

第九种思路

根据你的需要,下面这个正则表达式应该能正常工作的:

^(?=(.*\d){1})(.*\S)(?=.*[a-zA-Z\S])[0-9a-zA-Z\S]{8,}

只需创建一个字符串变量,分配模式,并创建一个布尔方法,如果模式匹配正确则返回true,否则返回false。

示例:

String pattern = "^(?=(.*\d){1})(.*\S)(?=.*[a-zA-Z\S])[0-9a-zA-Z\S]{8,}";
String password_string = "Type the password here"

private boolean isValidPassword(String password_string) {
    return password_string.matches(Constants.passwordPattern);
}

第十种思路

试试这个正则表达式:

^.*(?=.{8,})(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=])[a-zA-Z0-9@#$%^&+=]*$

这个正则表达式对我来说非常完美。

function myFunction() {
    var str = "c1TTTTaTTT@";
    var patt = new RegExp("^.*(?=.{8,})(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=])[a-zA-Z0-9@#$%^&+=]*$");
    var res = patt.test(str);
    console.log("Is regular matches:", res);
}

以上就是一文详解密码的正则表达式写法的详细内容,更多关于密码正则表达式写法的资料请关注我们其它相关文章!

(0)

相关推荐

  • 一文详解密码的正则表达式写法

    目录 密码的正则表达式如何来写? 最佳解决思路 次佳解决思路 第三种解决思路 第四种思路 第五种思路 第六种思路 第七种思路 第八种思路 第九种思路 第十种思路 正则表达式:密码必须至少包含八个字符.至少包含一个数字.小写和大写的字母以及特殊字符 密码的正则表达式如何来写? 我需要一个正则表达式来检查密码: 密码至少包含八个字符.至少包含一个数字.同时包含小写字母和大写字母以及特殊字符,例如#,?,!) 不能是旧密码或包含用户名,"password"或"websitename

  • 一文详解凯撒密码的原理及Python实现

    目录 一.什么是恺撒密码 二.程序运行环境 三.恺撒密码:加密 3.1 恺撒密码加密实例程序 3.2 恺撒密码加密实例程序运行结果 四.恺撒密码:解密 4.1 恺撒密码解密实例程序 4.2 恺撒密码解密实例程序运行结果 五.完整程序 六.总结 一.什么是恺撒密码 恺撒密码是古罗马恺撒大帝用来对军事情报进行加密的算法,它采用了替换方法对信息中的每一个英文字符循环替换为字母表序列该字符后面第三个字符: 原文:A B C D E F G H I J K L M N O P Q R S T U V W

  • 一文详解Golang 定时任务库 gron 设计和原理

    目录 cron 简介 gron 定时参数 源码解析 Cron Entry 按照时间排序 新增定时任务 启动和停止 Schedule 扩展性 经典写法-控制退出 结语 cron 简介 在 Unix-like 操作系统中,有一个大家都很熟悉的 cli 工具,它能够来处理定时任务,周期性任务,这就是: cron. 你只需要简单的语法控制就能实现任意[定时]的语义.用法上可以参考一下这个Crontab Guru Editor,做的非常精巧. 简单说,每一个位都代表了一个时间维度,* 代表全集,所以,上面

  • 一文详解JS私有属性的6种实现方式

    目录 _prop Proxy Symbol WeakMap #prop ts private 总结 class 是创建对象的模版,由一系列属性和方法构成,用于表示对同一概念的数据和操作. 有的属性和方法是对外的,但也有的是只想内部用的,也就是私有的,那怎么实现私有属性和方法呢? 不知道大家会怎么实现,我梳理了下,我大概用过 6 种方式,我们分别来看一下: _prop 区分私有和公有最简单的方式就是加个下划线 _,从命名上来区分. 比如: class Dong { constructor() {

  • 一文详解JS中的事件循环机制

    目录 前言 1.JavaScript是单线程的 2.同步和异步 3.事件循环 前言 我们知道JavaScript 是单线程的编程语言,只能同一时间内做一件事,按顺序来处理事件,但是在遇到异步事件的时候,js线程并没有阻塞,还会继续执行,这又是为什么呢?本文来总结一下js 的事件循环机制. 1.JavaScript是单线程的 JavaScript 是一种单线程的编程语言,只有一个调用栈,决定了它在同一时间只能做一件事.在代码执行的时候,通过将不同函数的执行上下文压入执行栈中来保证代码的有序执行.在

  • 一文详解Java线程中的安全策略

    目录 一.不可变对象 二.线程封闭 三.线程不安全类与写法 四.线程安全-同步容器 1. ArrayList -> Vector, Stack 2. HashMap -> HashTable(Key, Value都不能为null) 3. Collections.synchronizedXXX(List.Set.Map) 五.线程安全-并发容器J.U.C 1. ArrayList -> CopyOnWriteArrayList 2.HashSet.TreeSet -> CopyOnW

  • 一文详解Spring Security的基本用法

    目录 1.引入依赖 2.用户名和密码在哪里设置 3.UserDetailsService接口详解 3.1JdbcDaoImpl实现类 3.2InMemoryUserDetailsManager实现类 3.3自定义实现类实现UserDetailsService接口 4.如何修改登录页面 Spring Security是一个功能强大且高度可定制的身份验证和访问控制框架, 提供了完善的认证机制和方法级的授权功能.是一款非常优秀的权限管理框架.它的核心是一组过滤器链,不同的功能经由不同的过滤器. 今天通

  • 一文详解Python中生成器的原理与使用

    目录 什么是生成器 迭代器和生成器的区别 创建方式 生成器表达式 基本语法 生成器函数 yield关键字 yield和return yield的使用方法 生成器函数的基本使用 send的使用 可迭代对象的优化 总结 我们学习完推导式之后发现,推导式就是在容器中使用一个for循环而已,为什么没有元组推导式? 原因就是“元组推导式”的名字不是这样的,而是叫做生成器表达式. 什么是生成器 生成器表达式本质上就是一个迭代器,是定义迭代器的一种方式,是允许自定义逻辑的迭代器.生成器使用generator表

  • 一文详解Pinia和Vuex与两个Vue状态管理模式

    目录 前言 安装 挂载 Vuex Pinia 修改状态 vuex Pinia Pinia解构(storeToRefs) getters Pinia Vuex modules Pinia Vuex 写在最后 前言 Pinia和Vuex一样都是是vue的全局状态管理器.其实Pinia就是Vuex5,只不过为了尊重原作者的贡献就沿用了这个看起来很甜的名字Pinia. 本文将通过Vue3的形式对两者的不同实现方式进行对比,让你在以后工作中无论使用到Pinia还是Vuex的时候都能够游刃有余. 既然我们要

  • 一文详解如何创建自己的Python装饰器

    目录 1.@staticmethod 2.自定义装饰器 3.带参数的装饰器 python装饰器在平常的python编程中用到的还是很多的,在本篇文章中我们先来介绍一下python中最常使用的@staticmethod装饰器的使用. 之后,我们会使用两种不同的方式来创建自己的自定义python装饰器以及如何在其他地方进行调用. 1.@staticmethod @staticmethod是python开发者经常用来在一个类中声明该函数是一个静态函数时使用到的装饰器,比如创建一个HelloWorld的

随机推荐