fuinei 发表于 2014-9-6 23:36:25

[已解决]请教关于如何验证字符是否满足特殊复杂度的问题

本帖最后由 fuinei 于 2014-9-7 18:25 编辑

各位好,本人不熟悉正则表达式,请问如何编写正则表达式可以检验输入的字符是否可以满足强密码要求呢?
强密码要求基本原则:
1、长度大于等于6位
2、需同时包括大写、小写字母、数字或特殊符号中的3种类型

afan 发表于 2014-9-7 09:44:57

MsgBox(0, '', _CkPw('ss_sAd'))

Func _CkPw($sP = '', $len = 6)
        If StringLen($sP) < $len Then Return SetError(1, 0, 0)
        If StringRegExp($sP, '[^a-zA-Z0-9_]') Then Return SetError(2, 0, 0)
        If Not StringRegExp($sP, '') Or Not StringRegExp($sP, '') Or Not StringRegExp($sP, '') Then Return SetError(3, 0, 0)
        Return 1
EndFunc   ;==>_CkPw

header 发表于 2014-9-7 10:43:42

a版 果然是大救星

fuinei 发表于 2014-9-7 11:36:25

回复 2# afan

谢谢afan版主的指导,经测试代码可实现
1、要求字符串长度大于等于6位
2、字符串中必须包括a-z,A-Z,0-9 3种字符
3、字符串可包括a-z,A-Z,0-9和_字符
对于特殊字符的判断有点小问题,如代码认为'AaZz12'返回1,而'AaZz12.'返回0,把特殊.加到第5行正则表达式中(如 '[^a-zA-Z0-9_].'可使结果返回1,请问对于特殊字符是否需要全部添加到正则表达式呢?

user3000 发表于 2014-9-7 18:08:51

回复 4# fuinei

用删除法检测,如何?MsgBox(0, @error, _CkPw('A^sssad9'))

Func _CkPw($sP = '', $len = 6)
      If StringLen($sP) < $len Then Return SetError(1, 0, 0)
                Local $iCount = 0
                If StringRegExp($sP, '[\W_]') Then $iCount += 1
                $sP = StringRegExpReplace($sP, '', '')
                If Not @error And @extended Then $iCount += 1
      $sP =StringRegExpReplace($sP, '', '')
                If Not @error And @extended Then $iCount += 1
                $sP =StringRegExpReplace($sP, '', '')
                If Not @error And @extended Then $iCount += 1
                If $iCount >= 3 Then Return 1
      Return SetError(2, 0, 0)
EndFunc   ;==>_CkPw

user3000 发表于 2014-9-7 18:23:26

回复 5# user3000

自己在5楼,想多了.
2楼A大,估计错解了点楼主的意思.MsgBox(0, @error, _CkPw('A^sssad9'))

Func _CkPw($sP = '', $len = 6)
      If StringLen($sP) < $len Then Return SetError(1, 0, 0)
                Local $iCount = 0
                If StringRegExp($sP, '[\W_]') Then $iCount += 1
                IfStringRegExp($sP, '') Then $iCount += 1
      If StringRegExp($sP, '') Then $iCount += 1
      If StringRegExp($sP, '') Then $iCount += 1               
                If $iCount >= 3 Then Return 1
      Return SetError(2, 0, 0)
EndFunc   ;==>_CkPw

fuinei 发表于 2014-9-7 18:24:48

回复 5# user3000

此方法非常不错,\W查询字符中是否存在特殊符号,再用了3个基本正则表达式的替换语句要判断指定的字符中是否包括大小写英文和是否存在数字,完全符合判断字符是否符合强密码的要求,谢谢指导!

fuinei 发表于 2014-9-7 18:49:24

回复 6# user3000

A大的思路确实很不错并且代码更容易理解,6楼的代码也可以满足需求,谢谢!
页: [1]
查看完整版本: [已解决]请教关于如何验证字符是否满足特殊复杂度的问题