简约直接好用的正则表达式

本文介绍了多种正则表达式解决方案,用于验证密码是否符合特定规则,如至少包含一个大写字母、小写字母、数字和特殊字符,长度在8到30个字符之间。通过这些正则表达式,可以有效地检查密码的有效性和安全性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最佳解决思路

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

“^(?=.[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);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值