正则表达式混合至少2个字符(字母,数字,标点符号,特殊字符)

时间:2016-07-15 15:29:17

标签: regex

我正在尝试为密码字段创建一个正则表达式,用于检查输入是否包含至少两个字符集(字母,数字,标点符号,特殊字符)的混合。此外,第一个和最后一个字符不能是数字,长度必须至少为8个字符。

我从未处理正则表达式的条件逻辑,所以这可能是我遇到这么困难的原因。到目前为止,这(但它没有按预期工作):

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

1 个答案:

答案 0 :(得分:1)

就个人而言,我不会用一个正则表达式来做这件事。为什么不通过一组更简单的方法来运行它,只是为了节省自己不可避免的维护难题?像(按顺序,伪代码):

// First and last are non-numeric and length check
if (!regex_check(pass, /^[^0-9].{6}.*[^0-9]$/)) return false

regexes = {/[a-zA-Z]/, /[0-9]/, /\p{P}|\p{Sc}|\^/} // Different character categories

numCategories = 0
for r in regex
    if (regex_check(pass, r)) numCategories += 1

if numCategories >= 2 return true
return false