[英]Password REGEX with min 6 chars, at least one letter and one number and may contain special characters
[英]Regex for password must contain at least eight characters, at least one number and both lower and uppercase letters and special characters
我想要一个正则表达式来检查:
密码至少包含八个字符,包括至少一个数字,包括大小写字母和特殊字符,例如#
?
, !
.
它不能是您的旧密码,也不能包含您的用户名、 "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,}$"
最少 8 个字符,至少 1 个大写字母、1 个小写字母、1 个数字和 1 个特殊字符:
"^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$"
最少 8 个字符,最多 10 个字符,至少 1 个大写字母、1 个小写字母、1 个数字和 1 个特殊字符:
"^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,10}$"
正则表达式没有 AND 运算符,因此很难编写匹配有效密码的正则表达式,当有效性由某物和其他东西和其他东西定义时......
但是,正则表达式确实有一个 OR 运算符,所以只需应用 DeMorgan 定理,并编写一个匹配无效密码的正则表达式:
任何少于八个字符的内容或任何没有数字的内容或任何没有大写的内容或任何没有小写的内容或任何没有特殊字符的内容。
所以:
^(.{0,7}|[^0-9]*|[^A-Z]*|[^a-z]*|[a-zA-Z0-9]*)$
如果有任何匹配,那么它是一个无效的密码。
使用以下正则表达式满足以下条件:
条件:
正则表达式:
/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[#$@!%&*?])[A-Za-z\d#$@!%&*?]{8,30}$/
@anubhava 的回答只是一个小改进:由于特殊字符仅限于键盘中的字符,因此将其用于任何特殊字符:
^(?=.*?[AZ])(?=(.*[az]){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 - 涵盖各种案例的简单演示
一个更“通用”的版本(?),允许没有英文字母作为特殊字符。
^(?=\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*[az])(?=\S*[AZ])(?=\S*\d)(?=\S*[^\w\s])\S{8,}$/; pwdList.forEach(function (pw) { document.write('<span style="color:'+ (re.test(pw) ? 'green':'red') + '">' + pw + '</span><br/>'); });
我会回复彼得莫滕森,但我没有足够的声誉。
他的表情非常适合每个指定的最低要求。 他的表达式不需要特殊字符的问题是它们也不允许特殊字符,因此它们也强制执行最大要求,我不相信 OP 要求。 通常,您希望允许您的用户设置他们想要的密码强度; 为什么要限制强密码?
所以,他的“最少八个字符,至少一个字母和一个数字”表达:
^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d]{8,}$
达到最低要求,但剩下的字符只能是字母和数字。 要允许(但不要求)特殊字符,您应该使用以下内容:
^(?=.*[A-Za-z])(?=.*\d).{8,}$
允许任何字符
或者
^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d$@$!%*#?&]{8,}$
允许特定的特殊字符
同样,“最少八个字符,至少一个大写字母,一个小写字母和一个数字:”
^(?=.*[az])(?=.*[AZ])(?=.*\d)[a-zA-Z\d]{8,}$
符合最低要求,但只允许使用字母和数字。 利用:
^(?=.*[az])(?=.*[AZ])(?=.*\d).{8,}$
允许任何字符
或者
^(?=.*[az])(?=.*[AZ])(?=.*\d)[A-Za-z\d$@$!%*?&]{8,}
允许特定的特殊字符。
导入 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}/"
可选特殊字符:
表达:
"/^(?=.*\d)(?=.*[a-zA-Z]).{6,20}$/"
如果不需要最小和最大条件,则删除.{6, 16}
这对我有用:
^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[@$!%*?&])([a-zA-Z0-9@$!%*?&]{8,})$
对于标准密码要求,我发现这很有用:
至少 1 个字母
至少 1 位数
不包含空格
可选的特殊字符,例如@$!%*#?&^_-
最少 8 个字符长
/^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d@$!%*#?&^_-]{8,}$/
您还可以设置上限,例如 {8,32} 最长为 32 个字符。
不直接回答这个问题,但它真的必须是一个正则表达式吗?
我曾经做过很多 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
}
考虑以下正则表达式解决方案怎么样:
^(?=.*[\w])(?=.*[\W])[\w\W]{8,}$
这验证了以下内容:
在以下链接中检查它 ht tps://regex101.com/r/qPmC06/4/
对于需要以下内容的更严格的验证:
正则表达式:
/(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[@$!%*#?&^_-]).{8,}/
我希望它可以帮助更严格的人。
^(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*[!@#$%^&*()_+,.\\\/;':"-]).{8,}$
另一种选择是使用否定字符类在前瞻断言中使用对比,可选地匹配除在匹配应匹配字符之前列出的任何字符之外的任何字符。
^(?=[^A-Z\n]*[A-Z])(?=[^a-z\n]*[a-z])(?=[^0-9\n]*[0-9])(?=[^#?!@$%^&*\n-]*[#?!@$%^&*-]).{8,}$
查看正则表达式演示
在部分情况下,模式匹配:
^
字符串开头(?=[^AZ\n]*[AZ])
正向前瞻,断言 0+ 次除 AZ 或换行符之外的任何字符。 然后匹配一个 char AZ(?=[^az\n]*[az])
char az 的相同方法(?=[^0-9\n]*[0-9])
数字 0-9 的方法相同(?=[^#?!@$%^&*\n-]*[#?!@$%^&*-])
您认为特殊的 char 方法相同.{8,}
匹配除换行符以外的任何字符 8 次或更多次$
字符串结尾笔记
.{8,}
更改为\S{8,}
以匹配 8 个或更多非空白字符.
或\S
可以匹配比前瞻断言中指定的更多的字符。 如果您只想匹配断言中使用的字符,您可以更改.{8,}
以仅匹配允许的字符[#?!@$%^&*A-Za-z0-9-]{8,}
使用字符类 const regex = /^(?=[^AZ\n]*[AZ])(?=[^az\n]*[az])(?=[^0-9\n]*[0-9])(?=[^#?!@$%^&*\n-]*[#?!@$%^&*-]).{8,}$/; [ "abcA1#!A", "#!asdfSFD1;", "# af F1 ;", "1111111111", "aaaaaaaa", "11111111", "AAAAAAAA", "########", "aA1#" ].forEach(s => console.log(regex.test(s) ? `Match --> ${s}` : `No match --> ${s}`) );
/^(?=.*[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'
),
在 2020 年测试这个:
^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$
验证自己
const regex = /^(?=.*[az])(?=.*[AZ])(?=.*\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}`); }); }
pattern="(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,}"
根据您的需要,这种模式应该可以正常工作。 尝试这个,
^(?=(.*\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);
}
@ClasG 已经建议:
^(?=\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,}$
我在这里发现了很多问题,所以我自己做了。
这是它的荣耀,有测试:
^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*([^a-zA-Z\d\s])).{9,}$
https://regex101.com/r/DCRR65/4/tests
需要注意的事项:
\w
因为它包括我正在测试的_
。演示:
function password_check() { pass = document.getElementById("password").value; console.log(pass); regex = /^(?=.*[az])(?=.*[AZ])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$/; if (regex.exec(pass) == null) { alert('invalid password!') } else { console.log("valid"); } }
<input type="text" id="password" value="Sample@1"> <input type="button" id="submit" onclick="password_check()" value="submit">
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
保持简单愚蠢:
这应该永远为您解决问题。
正则表达式: ^(.{0,7}|[^az]{1,}|[^AZ]{1,}|[^\d]{1,}|[^\W]{1,})$|[\s]
如果您的密码与上面的正则表达式匹配,则它是无效的。
如果不匹配,则您的密码有效且包含至少 8 个字符、一个大写字母、一个小写字母和一个符号或特殊字符。 它也不包含空格、制表符或换行符。
正则表达式的细分
.{0,7}
- 如果密码包含 0 到 7 个字符,则匹配。[^az]{1,}
- 如果没有找到小写字母则匹配[^AZ]{1,}
- 如果没有找到大写字母则匹配[^\d]{1,}
- 如果没有找到数字(在 [0-9] 之间)则匹配[\s]
- 如果找到空格、制表符或换行符,则匹配。 使用这种方法,在允许的符号方面没有限制或限制。 如果您想限制允许的符号数量,只需将[^\W]
更改为[^YourSymbols]
。
(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+-]).{6}
密码必须包含 1 到 9 的一位数字、1 个小写字母、1 个大写字母、1 个特殊字符,不能有空格,长度必须为 8-16 个字符。
/^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*\W)(?!.* ).{8,16}$/
解释:
(?=.*[0-9])
表示密码必须包含从 1 到 9 的单个数字。(?=.*[az])
表示密码必须包含一个小写字母。(?=.*[AZ])
表示密码必须包含一个大写字母。(?=.*\W)
表示密码必须包含一个特殊字符。.{8,16}
表示密码长度必须为 8-16 个字符。 我们必须在正则表达式的末尾使用它,就在$
符号之前。 什么是^
和$
:
^
表示字符串的开头。 $
表示字符串的结尾。
如果我们不使用这些^
& $
,正则表达式将无法确定密码的最大长度。 在上面的例子中,我们有一个密码不能超过 16 个字符的条件,为了使这个条件有效,我们使用了这些^
& $
删除最大长度限制:
.{8,}
而不是.{8,16}
,则意味着密码必须至少有 8 个字符长。 因此,将不存在任何检查密码最大长度的条件。不接受任何数字(数字):
(?=.*[0-9])
,如果我们使用(?!.*[0-9])
,这意味着密码不能包含 1-9 中的任何数字(与(?=.*[0-9])
是使用!
而不是=
)不接受任何特殊字符:
(?=.*\W)
,如果我们使用(?!.*\W)
,这意味着密码不能包含任何特殊字符(与(?=.*\W)
的区别是使用!
而不是=
)数字(数字)的替代语法:
(?=.*[0-9])
,我们可以使用(?=.*\d)
。 (?=.*\d)
也意味着密码必须包含从 1 到 9 的单个数字。密码必须包含从 1 到 9 的一位数字,一个小写字母,一个大写字母,一个下划线,但不能包含其他特殊字符,不能有空格,长度必须为 8-16 个字符。
/^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*_)(?!.*\W)(?!.* ).{8,16}$/
与模式 1 的区别
Pattern 1
上的(?=.*_)
。(?=.*_)(?!.*\W)
表示密码必须包含下划线,但不能包含任何其他特殊字符。密码必须包含从 1 到 9 的一位数字,一个小写字母,一个大写字母,一个下划线,不能有空格,长度必须为 8-16 个字符。 使用除下划线以外的任何其他特殊字符是可选的。
/^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*_)(?!.* ).{8,16}$/
与模式 2 的区别
(?!.*\W)
Pattern 2
上的内容。(?=.*_)
(?!.*\W)
,特殊字符已成为可选字符。 现在,需要一个下划线,但可以使用或不使用任何其他特殊字符,因为它是可选的。密码必须包含 1 到 9 的一位数字、1 个小写字母、1 个大写字母和 1 个下划线,长度必须为 8-16 个字符。 任何其他特殊字符的使用和空格的使用都是可选的。
/^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z]).{8,16}$/
与模式3的区别
Pattern 3
上的(?=.*_)
& (?!.* )
。(?=.*_)
,不再强制传递一个下划线。 现在,传递特殊字符是可选的。(?!.* )
,空间的使用也变得可选。模式匹配至少 1 个大写字符、1 个数字和任何特殊字符,长度在 8 到 63 之间。
"^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)[a-zA-Z\\d\\W]{8,63}$"
此模式用于 JAVA 编程。
使用以下正则表达式满足以下条件:
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
只是我们可以通过使用 HTML5 来做到这一点。
在模式属性中使用以下代码,
pattern="(?=^.{8,}$)((?=.*\d)(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$"
它将完美地工作。
您可以使用以下正则表达式模式来检查密码是否符合您的期望。
((?=.*\\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[~!@#$%^&*()]).{8,20})
(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z\d]{8,}$
我实际上只是在这里复制了第一个答案并将其变成了一个更方便用户的正则表达式,它需要一个上、一个下和至少 8 个字符,但接受“介于两者之间”的所有内容。
这是一个示例正则表达式,需要
重要提示:这个正则表达式也将除了所有其他字符,例如数字,特殊字符,如 $,#,! 等等- 只要规则 1. 到 3. 匹配输入字符串
^(?=.*[a-z])(?=.*[A-Z]).{8,}$
注意“。” 几乎在正则表达式的末尾。 这将匹配几乎任何(以及任何可读的)字符
用这个,
((?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[!@#$%?=*&]).{8,20})
它将验证至少一个小写字母、一个大写字母、一个数字和 (!,@,#,$,%,?,=,*,&) 的特殊字符。
最小长度为 8,最大长度为 20
如果你不喜欢使用正则表达式。 所以这个模块有很大帮助: https ://www.npmjs.com/package/password-validator
var passwordValidator = require('password-validator');
// Create a schema
var schema = new passwordValidator();
// Add properties to it
schema
.is().min(8) // Minimum length 8
.is().max(100) // Maximum length 100
.has().uppercase() // Must have uppercase letters
.has().lowercase() // Must have lowercase letters
.has().digits(2) // Must have at least 2 digits
.has().not().spaces() // Should not have spaces
.is().not().oneOf(['Passw0rd', 'Password123']); // Blacklist these values
// Validate against a password string
console.log(schema.validate('validPASS123'));
// => true
console.log(schema.validate('invalidPASS'));
// => false
在 Java/Android 中,要测试一个至少包含一个数字、一个字母、一个特殊字符的密码,模式如下:
"^(?=.*[A-Za-z])(?=.*\\d)(?=.*[$@$!%*#?&])[A-Za-z\\d$@$!%*#?&]{8,}$"
尝试这个:
^.*(?=.{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);
}
希望下面的作品。 我在 Azure 自定义策略中试过这个。
^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@#$%^&*\-_+=[\]{}|\\:',?/`~"();!])([A-Za-z\d@#$%^&*\-_+=[\]{}|\\:',?/`~"();!]|\.(?!@)){6,16}$
使用此正则表达式,所有条件都得到满足:
^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[^A-Za-z0-9]).{8,}$
此正则表达式将强制执行以下规则:
(?=.*?[AZ])
(?=.*?[az])
(?=.*?[0-9])
(?=.*?[^A-Za-z0-9])
.{8,}
"^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[\\\\`~!@#$%^&/*()_+=[{}]\\[\\]|\\:;'\"<>.,?/-]).{8,}$";
我在之前的答案之一中找到的解决方案是:
*最少 8 个字符,至少 1 个大写字母、1 个小写字母、1 个数字和 1 个特殊字符:
"^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[$@$!%*?&])[A-Za-z\d$@$!%*?&]{8,}"*
...对我不起作用,但以下是简化版本并且效果很好(添加您喜欢的任何特殊字符,我在这里添加了 # ),并像使用字母一样添加数字规则:
"^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[$@$!%*?&]){8,}"
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.');
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.