使用正则表达式的复杂密码验证
Complex password validation using regex
我试图为密码验证创建一个javascript正则表达式。接受密码的规则为
- 应包含12个字符或以上
- 应该包含以下特殊字符之一:
* ^ !
- 至少两个大写字符
- 至少两个数字
- 至少一个小写字母
我在网上找到了一个例子,并修改如下
(?=.*[0-9]{2,})(?=.*[a-z])(?=.*[A-Z]{2,}).{12,}
但是,这仍然忽略了特殊字符的要求,并且只有在大写字符和数字按顺序排列时才有效。这些是我用这个得到的结果
aMMericano11 - true
aMmeRican1o1 - false
我希望第二个也能被接受,当然要加上特殊字符。
有谁能帮我一下吗?无视我对任意密码规则无效的讽刺评论,你试图一次做太多事情。
你要做的是"它是否有12个或更多的字母,一个来自*^!
的符号,至少两个大写字母,至少两个数字和至少一个小写字母"…
你应该做的是:
- 是否有12个或更多的字母?如果没有,则失败并请求更长的密码
- 有符号吗?如果没有,则失败并请求符号
- 是否至少有两个大写字母?如果没有,请失败并请求它们。
- 至少有两个数字吗?如果没有,请失败并请求它们。
- 是否至少有一个小写字母?如果没有,则失败并请求。
把大问题分解成小问题,你最终会得到更好的用户体验,因为你可以准确地告诉你的用户你想从他们那里得到什么
问题在未来:
(?=.*[0-9]{2,})
该模式要求在文本中出现模式[0-9]{2,}
(例如,一个2位数)。你可能想说的是:
(?=(.*[0-9]){2,})
这允许数字被其他字符分隔,而不是连续的。
同样的问题也适用于大写字母规则。将这些组合在一起,最后的表达式将是:
(?=(.*[0-9]){2,})(?=.*['*^!])(?=.*[a-z])(?=(.*[A-Z]){2,}).{12,}
当且仅当密码满足有效性规则时,表达式才会匹配。如果需要更多的粒度(例如,检测违反了特定的规则),您可能需要将表达式分解为更小的表达式。
同意@Niet the Dark Absol
但是如果你想用regEx做这个,那么把它改成:
'ab2c3F*ghijKM'.match(/['w'W]{12,}/) //Should contain 12 characters or more
'ab2c3F*ghijKM'.match(/[*^!]/) //Should contain one of these special characters * ^ !
'ab2c3F*ghijK'.match(/[A-Z]/g).length>=2 //At least two uppercase characters
'ab2c3F*ghijK'.match(/['d]/g).length>=2 //At least two numbers characters
'23Fa*K'.match(/[a-z]/) //At least one lowercase characters
然后应用&&对所有这些表达式的操作
,
var pass = 'ab2cFg*hij3KM';
var isValidInput = pass.match(/['w'W]{12,}/) && pass.match(/[*^!]/) && (pass.match(/[A-Z]/g).length>=2) && (pass.match(/['d]/g).length>=2) && pass.match(/[a-z]/)
if(isValidInput) {
console.log('valid')
} else {
console.log('invalid')
}
相关文章:
- 为密码验证实现正则表达式时出现问题
- Regex表达式无法用于密码验证
- javascript 的密码验证
- 密码验证协助
- 使用javascript和jquery进行密码验证
- JQuery验证Regex密码验证
- 如何根据一定的标准在angularjs中使用正则表达式添加密码验证
- 密码验证器javascript正则表达式
- 密码并确认密码验证
- 根据字符串数组检查字符串(密码验证)
- 密码验证不起作用
- ng-message不适用于重新键入密码验证AngularJS
- 用于密码验证匹配的 Js 正则表达式
- ExtJS 4 密码验证
- SugarCRM中的Javascript密码验证文件在哪里
- 不使用正则表达式的表单密码验证
- Javascript 密码验证窗口.location.replace.
- 密码验证不正确
- 密码验证至少为 6 个字符
- 登录表单中的密码验证区分大小写