我想要一个正则表达式来检查:
密码至少包含八个字符,包括至少一个数字,包括小写和大写字母以及特殊字符,例如#
,?
,!
。
它不能是您的旧密码或包含您的用户名"password"
或"websitename"
这是我的验证表达式,包含一个大写字母,一个小写字母和一个数字或特殊字符,用于八个字符。
(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$"
如何为编写密码,密码必须是8个字符,包括一个大写字母,一个特殊字符和字母数字字符?
答案 0 :(得分:877)
最少八个字符,至少一个字母和一个数字:
"^(?=.*[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,}$"
最少8个字符和最多10个字符,至少一个大写字母,一个小写字母,一个数字和一个特殊字符:
"^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,10}$"
答案 1 :(得分:283)
您可以将此正则表达式用于多个lookahead assertions (conditions):
^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[#?!@$%^&*-]).{8,}$
此正则表达式将强制执行以下规则:
(?=.*?[A-Z])
(?=.*?[a-z])
(?=.*?[0-9])
(?=.*?[#?!@$%^&*-])
.{8,}
(带锚点)答案 2 :(得分:53)
正则表达式没有AND运算符,因此编写与有效密码匹配的正则表达式非常困难,当有效性由某些东西和其他东西定义时,其他东西......
但是,正则表达式确实有一个OR运算符,所以只需应用DeMorgan定理,并编写一个匹配无效密码的正则表达式:
少于八个字符的任何内容或任何没有数字的内容或任何没有大写或的内容或任何没有小写的内容任何没有特殊字符的东西。
所以:
^(.{0,7}|[^0-9]*|[^A-Z]*|[^a-z]*|[a-zA-Z0-9]*)$
如果有任何匹配,则表示密码无效。
答案 3 :(得分:29)
@ anubhava的回答只是一个小小的改进:由于特殊字符仅限于键盘中的特殊字符,因此将其用于任何特殊字符:
^(?=.*?[A-Z])(?=(.*[a-z]){1,})(?=(.*[\d]){1,})(?=(.*[\W]){1,})(?!.*\s).{8,}$
此正则表达式将强制执行以下规则:
答案 4 :(得分:20)
对于我的情况,我遇到了最受欢迎的答案。例如,我的验证失败了;
或[
等字符。我对列入我的特殊字符不感兴趣,所以我反而使用[^\w\s]
作为测试 - 简单地把 - 匹配非单词字符(包括数字)和非空白字符。总结一下,这对我有用......
8
个字符1
数字字符1
小写字母1
大写字母1
特殊字符/^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[^\w\s]).{8,}$/
JSFiddle Link - 涵盖各种案例的简单演示
答案 5 :(得分:13)
导入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)
});
答案 6 :(得分:13)
更多"泛型"版本(?),不允许任何英文字母作为特殊字符。
^(?=\S*[a-z])(?=\S*[A-Z])(?=\S*\d)(?=\S*[^\w\s])\S{8,}$
var pwdList = [
'@@V4-\3Z`zTzM{>k',
'12qw!"QW12',
'123qweASD!"#',
'1qA!"#$%&',
'Günther32',
'123456789',
'qweASD123',
'qweqQWEQWEqw',
'12qwAS!'
],
re = /^(?=\S*[a-z])(?=\S*[A-Z])(?=\S*\d)(?=\S*[^\w\s])\S{8,}$/;
pwdList.forEach(function (pw) {
document.write('<span style="color:'+ (re.test(pw) ? 'green':'red') + '">' + pw + '</span><br/>');
});
&#13;
答案 7 :(得分:9)
Try this one:
Expression:
"/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[$@$!%*?&.])[A-Za-z\d$@$!%*?&.]{6, 20}/"
Optional Special Characters:
Expression:
"/^(?=.*\d)(?=.*[a-zA-Z]).{6,20}$/"
If the min and max condition is not required then remove .{6, 16}
答案 8 :(得分:8)
^(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*[!@#$%^&*()_+,.\\\/;':"-]).{8,}$
答案 9 :(得分:6)
这对我有用:
{{1}}
答案 10 :(得分:6)
Use the following Regex to satisfy the below conditions:
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}$/
答案 11 :(得分:6)
我会回复Peter Mortensen,但我没有足够的声誉。
他的表达对于每个指定的最低要求都是完美的。他的表达不需要特殊字符的问题是他们也不允许特殊字符,所以他们也强制执行最大要求,我不相信OP要求。通常,您希望允许用户根据自己的需要设置密码;为什么限制强密码?
所以,他的&#34;至少八个字符,至少一个字母和一个数字&#34;表达式:
^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d]{8,}$
达到最低要求,但其余字符只能 为字母和数字。要允许(但不要求)特殊字符,您应该使用以下内容:
^(?=.*[A-Za-z])(?=.*\d).{8,}$
允许任何字符
或
^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d$@$!%*#?&]{8,}$
允许特定的特殊字符
同样,&#34;至少八个字符,至少一个大写字母,一个小写字母和一个数字:&#34;
^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z\d]{8,}$
符合最低要求,但仅允许字母和数字。使用:
^(?=.*[a-z])(?=.*[A-Z])(?=.*\d).{8,}$
允许任何字符
或
^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[A-Za-z\d$@$!%*?&]{8,}
允许特定的特殊字符。
答案 12 :(得分:4)
没有直接回答这个问题,但它真的必须是正则表达式吗?
我曾经做过很多Perl,习惯于用正则表达式解决问题。然而,当他们变得更加复杂,所有的前瞻和其他怪癖时,你需要编写几十个单元测试来杀死所有这些小错误。
此外,正则表达式通常比命令式或功能性解决方案慢几倍。
例如,以下(不是非常FP)Scala函数解决原始问题的速度比最流行答案的正则表达式快三倍。它的作用也很清楚,你根本不需要进行单元测试:
def validatePassword(password: String): Boolean = {
if (password.length < 8)
return false
var lower = false
var upper = false
var numbers = false
var special = false
password.foreach { c =>
if (c.isDigit) numbers = true
else if (c.isLower) lower = true
else if (c.isUpper) upper = true
else special = true
}
lower && upper && numbers && special
}
答案 13 :(得分:3)
var strongRegex = new RegExp("^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[!@#\$%\^&\*])(?=.{8,})");
var mediumRegex = new RegExp("^(((?=.*[a-z])(?=.*[A-Z]))|((?=.*[a-z])(?=.*[0-9]))|((?=.*[A-Z])(?=.*[0-9])))(?=.{6,})");
最适合 JavaScript
答案 14 :(得分:3)
根据您的需要,这种模式应该可以正常工作。试试这个,
^(?=(.*\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);
}
答案 15 :(得分:3)
pattern="(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,}"
答案 16 :(得分:3)
在2020年对此进行测试:
^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$
验证自己
const regex = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$/;
const str = `some12*Nuts`;
let m;
if ((m = regex.exec(str)) !== null) {
// The result can be accessed through the `m`-variable.
m.forEach((match, groupIndex) => {
console.log(`Found match, group ${groupIndex}: ${match}`);
});
}
答案 17 :(得分:2)
对于标准密码要求,我发现这很有用:
至少 1 个字母
至少 1 位数字
不包含空格
可选的特殊字符,例如@$!%*#?&^_-
最少 8 个字符长
/^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d@$!%*#?&^_-]{8,}$/
您还可以设置上限,例如 {8,32} 最多 32 个字符。
答案 18 :(得分:2)
考虑以下正则表达式解决方案:
^(?=.*[\w])(?=.*[\W])[\w\W]{8,}$
验证以下内容:
答案 19 :(得分:2)
演示:
ngOnInit() {
...
//post data
this.Service.client = {
id: 0,
name: null,
phone: null,
address: null,
account: 0,
nots: null,
branchId: null,
type: null,
}
function password_check() {
pass = document.getElementById("password").value;
console.log(pass);
regex = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$/;
if (regex.exec(pass) == null) {
alert('invalid password!')
}
else {
console.log("valid");
}
}
答案 20 :(得分:2)
我在这里发现了很多问题,所以我自己做了。
通过测试,这就是它的全部荣耀:
^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*([^a-zA-Z\d\s])).{9,}$
https://regex101.com/r/DCRR65/4/tests
要注意的事情:
\w
,因为其中包括我正在测试的_
。答案 21 :(得分:2)
@ClasG已经suggested:
^(?=\S*[a-z])(?=\S*[A-Z])(?=\S*\d)(?=\S*[^\w\s])\S{8,}$
但它不接受_(下划线)作为特殊字符(例如Aa12345 _)。
改进的是:
^(?=\S*[a-z])(?=\S*[A-Z])(?=\S*\d)(?=\S*([^\w\s]|[_]))\S{8,}$
答案 22 :(得分:2)
(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+-]).{6}
答案 23 :(得分:1)
您可以使用下面的正则表达式模式来检查密码是否符合您的期望。
((?=.*\\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[~!@#$%^&*()]).{8,20})
答案 24 :(得分:1)
我们可以使用HTML5来实现这一目标。
在模式属性
中使用以下代码pattern="(?=^.{8,}$)((?=.*\d)(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$"
它会完美运作。
答案 25 :(得分:1)
使用此
((?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[!@#$%?=*&]).{8,20})
它将验证至少一个小写字母,一个大写字母,一个数字以及(!,@,#,$,%,?,=,*,&)的特殊字符。
最小长度为8,最大长度为20
答案 26 :(得分:1)
使用以下Regex来满足以下条件:
Conditions: 1] Min 1 special character.
2] Min 1 number.
3] Min 8 characters or More
正则表达式:
^(?=.*\d)(?=.*[#$@!%&*?])[A-Za-z\d#$@!%&*?]{8,}$
可在线测试:https://regex101.com
答案 27 :(得分:0)
希望以下作品。我在Azure自定义策略中尝试过此操作。
^(?=。 [az])(?=。 [AZ])(?=。 \ d)(?=。 [@#$% ^&* -_ + = [] {} | \:',?/ ~"();!])([A-Za-z\d@#$%^&*\-_+=[\]{}|\\:',?/
〜“();!] |。(?!@)){6,16} $
答案 28 :(得分:0)
(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z\d]{8,}$
答案 29 :(得分:0)
我实际上只是在这里复制了第一个答案,并将其变成了一个更方便用户使用的正则表达式,它需要一个高位,一个低位和至少8个字符,但可以接受“介于两者之间”的所有字符。
这是一个示例正则表达式,需要
重要:此正则表达式还将排除所有其他字符,例如数字,特殊字符,例如$,#、! -只要规则1.至3.匹配输入字符串
^(?=.*[a-z])(?=.*[A-Z]).{8,}$
注意“。”正则表达式末尾的alomst。几乎可以匹配任何(和afaik任何可读的)字符
答案 30 :(得分:0)
模式匹配至少1个大写字母,1个数字和任何特殊字符,长度在8到63之间。
“^(?= [AZ])(?=。 [AZ])(?=。* \ d)[A-ZA-Z \ d \ W] {8, 63} $“
此模式用于JAVA编程。
答案 31 :(得分:0)
试试这个:
^.*(?=.{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);
}
答案 32 :(得分:0)
/^(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9]).*$/
这是验证至少 1个大写字母1个小写字母和1个数字的简单方法
这是我在快速验证中使用的示例
check('password')
.notEmpty()
.withMessage('Password cannot be null')
.bail()
.isLength({ min: 6 })
.withMessage('Password must be at least 6 characters')
.bail()
.matches(/^(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9]).*$/)
.withMessage(
'Must have atleast 1 uppercase, 1 lowercase letter and 1 number'
),
答案 33 :(得分:0)
在Java / Android中,使用以下模式测试至少包含一个数字,一个字母,一个特殊字符的密码:
"^(?=.*[A-Za-z])(?=.*\\d)(?=.*[$@$!%*#?&])[A-Za-z\\d$@$!%*#?&]{8,}$"
答案 34 :(得分:0)
var value=$("#password").val();
$.validator.addMethod("strongePassword",function(value)
{
return /^[A-Za-z0-9!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~]*$/.test(value) && /[a-z]/.test(value) && /\d/.test(value) && /[A-Z]/.test(value)&& /[A-Z]/.test(value);`enter code here`
},'Password must have minimum 9 characters and contain at least 1 UPPERCASE, 1 lower case, 1 number, 1 special character.');
答案 35 :(得分:-1)
我在上一个答案中找到的解决方案:
至少8个字符,至少1个大写字母,1个小写字母,1个数字和1个特殊字符: “^(?=。 [AZ])(?= [AZ])(?=。 \ d)(?= [$ @ $!%< ?/ EM>&安培;!?])[A-ZA-Z \ d $ @ $%的&安培;] {8,}“
...对我来说不起作用,但以下是一个简化版本,效果很好(添加你喜欢的任何特殊字符,我在这里添加#),并添加数字规则,就像你对字母一样:
"^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[$@$!%*?&]){8,}"