找回密码
 加入
搜索
查看: 6385|回复: 7

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

  [复制链接]
发表于 2014-9-6 23:36:25 | 显示全部楼层 |阅读模式
本帖最后由 fuinei 于 2014-9-7 18:25 编辑

各位好,本人不熟悉正则表达式,请问如何编写正则表达式可以检验输入的字符是否可以满足强密码要求呢?
强密码要求基本原则:
1、长度大于等于6位
2、需同时包括大写、小写字母、数字或特殊符号中的3种类型
发表于 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, '[a-z]') Or Not StringRegExp($sP, '[A-Z]') Or Not StringRegExp($sP, '[0-9_]') Then Return SetError(3, 0, 0)
        Return 1
EndFunc   ;==>_CkPw
发表于 2014-9-7 10:43:42 | 显示全部楼层
a版 果然是大救星
 楼主| 发表于 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,请问对于特殊字符是否需要全部添加到正则表达式呢?
发表于 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, '[a-z]', '')
                If Not @error And @extended Then $iCount += 1
        $sP =  StringRegExpReplace($sP, '[A-Z]', '')
                If Not @error And @extended Then $iCount += 1
                $sP =  StringRegExpReplace($sP, '[0-9]', '')
                If Not @error And @extended Then $iCount += 1
                If $iCount >= 3 Then Return 1 
        Return SetError(2, 0, 0)
EndFunc   ;==>_CkPw
发表于 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
                If  StringRegExp($sP, '[a-z]') Then $iCount += 1 
        If StringRegExp($sP, '[A-Z]') Then $iCount += 1
        If StringRegExp($sP, '[0-9]') Then $iCount += 1                
                If $iCount >= 3 Then Return 1 
        Return SetError(2, 0, 0)
EndFunc   ;==>_CkPw
 楼主| 发表于 2014-9-7 18:24:48 | 显示全部楼层
回复 5# user3000

此方法非常不错,\W查询字符中是否存在特殊符号,再用了3个基本正则表达式的替换语句要判断指定的字符中是否包括大小写英文和是否存在数字,完全符合判断字符是否符合强密码的要求,谢谢指导!
 楼主| 发表于 2014-9-7 18:49:24 | 显示全部楼层
回复 6# user3000

A大的思路确实很不错并且代码更容易理解,6楼的代码也可以满足需求,谢谢!
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-10-2 18:22 , Processed in 0.093162 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表