2016-07-15 138 views
0

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

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

(?=.{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

就个人而言,我不会这样做与一个单一的正则表达式。为什么不通过一组简单的程序来运行它,只是为了让您自己的维护难题避免不必要的麻烦?类似于(按伪代码):

// 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 
相关问题