Can't find the information you are looking for here? Then leave a message over on our WinBatch Tech Support Forum.
Keywords: Validate Validation Strong Password Passwords
; Field Validation with WinBatch Dialog ; Les Ferch, 2008-02-28 ; ---------------------------------------------------------------------------------------------- #DefineFunction Valid(DlgHandle,ControlNum,Pattern) ; Validate editbox data in a dynamic dialog using patterns ; Add to and/or modify the patterns below to suit your needs (e.g. add accented characters) BadChar = 0 Str = DialogControlGet(DlgHandle,ControlNum,3) Len = StrCharCount(Pattern) For i = 1 To Len Char = StrSub(Str,i,1) PatternChar = StrSub(Pattern,i,1) Switch 1 Case StrCharCount(Str)<i Break Case PatternChar=="?" ; Allow anything Break Case PatternChar=="A" ; Uppercase letters GoSub MakeUpper BadChar = StrScan(Char,"ABCDEFGHIJKLMNOPQRSTUVWXYZ",1,@FWDSCAN)==0 Break Case PatternChar=="a" ; Any letters BadChar = StrScan(StrLower(Char),"abcdefghijklmnopqrstuvwxyz",1,@FWDSCAN)==0 Break Case PatternChar=="'" ; Any letters or apostrophe or dash BadChar = StrScan(StrLower(Char),"'-abcdefghijklmnopqrstuvwxyz",1,@FWDSCAN)==0 Break Case PatternChar=="N" ; Uppercase alphanumeric GoSub MakeUpper BadChar = StrScan(Char,"ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789",1,@FWDSCAN)==0 Break Case PatternChar=="K" ; Uppercase alphanumeric plus space GoSub MakeUpper BadChar = StrScan(Char," ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789",1,@FWDSCAN)==0 Break Case PatternChar=="n" ; Alphanumeric BadChar = StrScan(StrLower(Char),"abcdefghijklmnopqrstuvwxyz0123456789",1,@FWDSCAN)==0 Break Case PatternChar=="*" ; Alphanumeric plus limited special characters MatchString = StrCat("abcdefghijklmnopqrstuvwxyz0123456789`~!@#$%%^&*()-_=+[{]}\|;:',<.>/?",'"') BadChar = StrScan(StrLower(Char),MatchString,1,@FWDSCAN)==0 Break Case PatternChar=="0" ; Numbers BadChar = StrScan(Char,"0123456789",1,@FWDSCAN)==0 Break Case 1 ; Otherwise match exactly BadChar = Char<>PatternChar Break EndSwitch If BadChar Then Str = StrSub(Str,1,i - 1) Next If !BadChar && StrCharCount(Str)>Len ; Limit length BadChar = 1 Str = StrSub(Str,1,Len) EndIf If BadChar Then DialogControlSet(DlgHandle,ControlNum,3,Str) Return :MakeUpper If Char<>StrUpper(Char) Char = StrUpper(Char) Str = StrCat(StrSub(Str,1,i - 1),Char,StrSub(Str,i + 1,-1)) DialogControlSet(DlgHandle,ControlNum,3,Str) EndIf Return #EndFunction ; ---------------------------------------------------------------------------------------------- ; Use regular expressions to validate data after OK is clicked #DefineFunction ValidRE(Str,RE,IgnoreCase) oRE = ObjectCreate("VBScript.RegExp") oRE.Pattern = RE oRE.IgnoreCase = IgnoreCase RetVal = oRE.Test(Str)<>0 ObjectClose(oRE) Return RetVal #EndFunction ; ---------------------------------------------------------------------------------------------- ; Callback procedure for sample dialog #DefineFunction SampleDlgCallbackProc(DlgHandle,DlgMsg,DlgID,DlgEvt,rsvd) Switch DlgMsg Case 0 ; MSG_INIT DialogProcOptions(DlgHandle,5,@TRUE) DialogControlState(DlgHandle,26,3,16) ; Enable mask for password field Return -1 ; RET_DO_DEFAULT Case 5 ; MSG_EDITBOX ControlNum = DialogControlState(DlgHandle,5,5,0) ; Get active field V15 = "Aaaaaaaaaaaaaaaaaaaa" V16 = "A'''''''''''''''''''" V17 = "???????????????????????????????????" V18 = "???????????????????????????????????" V19 = "A??????????????????????????????????" V20 = "A0A 0A0" V21 = "KKKKKKKK" V22 = "00000" V23 = "000-000-0000" V24 = "???????????????????????????????????" V25 = "000-00-0000" V26 = "***********************************" ; 35 char field with limited special characters ;V26 = "???????????????????????????????????" ; 35 char field allowing all characters Valid(DlgHandle,ControlNum,v%ControlNum%) ; Validate data in active field Return -1 ; RET_DO_DEFAULT EndSwitch Return -1 ; RET_DO_DEFAULT #EndFunction ; ---------------------------------------------------------------------------------------------- ; Main Routine ; Keep user in input dialog until all data passes validation or user cancels ; Change color variable to 128 (yelow field background) if data is not valid GoSub InitBackColor While 1 GoSub SampleDialog GoSub InitBackColor DataOK = @TRUE If StrCharCount(FName)<1 Then C15 = 128 If StrCharCount(LName)<2 Then C16 = 128 If StrCharCount(Address1)<3 Then C17 = 128 If StrCharCount(City)<2 Then C19 = 128 If !ValidRE(CPC,"[ABCEGHJKLMNPRSTVXY]\d[ABCEGHJKLMNPRSTVWXYZ] \d[ABCEGHJKLMNPRSTVWXYZ]\d$",0) Then C20 = 128 If !ValidRE(UKPC,"[A-Z]{1,2}\d[A-Z\d]? \d[ABD-HJLNP-UW-Z]{2}",0) Then C21 = 128 If StrLen(Zip)<5 Then C22 = 128 If StrLen(Phone)<12 Then C23 = 128 If !ValidRE(Email,"^[\w-\.]+@(\w+[\w-]+\.){0,3}\w+[\w-]+\.[a-zA-Z]{2,4}$",0) Then C24 = 128 If StrLen(SSN)<11 Then C25 = 128 If !ValidRE(PW,"^.*(?=.{8,})(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[\w]).*$",0) Then C26 = 128 PWSpecialCharFound = 0 For i = 1 To StrCharCount(PW) Char = StrUpper(StrSub(PW,i,1)) AllowAllSpecialChars = 0 ; Change to 1 to allow all special characters If AllowAllSpecialChars && StrScan(Char,"ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789",1,@FWDSCAN)==0 Then PWSpecialCharFound = 1 SpecialCharSet = StrCat("`~!@#$%%^&*()-_=+[{]}\|;:',<.>/?",'"') If !AllowAllSpecialChars && StrScan(Char,SpecialCharSet,1,@FWDSCAN)<>0 Then PWSpecialCharFound = 1 Next If !PWSpecialCharFound Then C26 = 128 For i = 15 To 26 If C%i%==128 Then DataOK = @FALSE Next If DataOK Then Break EndWhile Exit ; ---------------------------------------------------------------------------------------------- ; Initialize these dialog variables to 255 to set field background to white :InitBackColor For i = 15 To 26 C%i% = 255 ; Initialize background color Next Return ; ---------------------------------------------------------------------------------------------- ; Sample input dialog :SampleDialog SampleDlgFormat = `WWWDLGED,6.1` SampleDlgCaption = `Data Validation Example` SampleDlgX = 037 SampleDlgY = 107 SampleDlgWidth = 248 SampleDlgHeight = 216 SampleDlgNumControls = 026 SampleDlgProcedure = `SampleDlgCallbackProc` SampleDlgFont = `DEFAULT` SampleDlgTextColor = `DEFAULT` SampleDlgBackground = `DEFAULT,DEFAULT` SampleDlgConfig = 0 SampleDlg001 = `081,194,036,012,PUSHBUTTON,DEFAULT,"OK",1,13,32,DEFAULT,DEFAULT,DEFAULT` SampleDlg002 = `127,194,036,012,PUSHBUTTON,DEFAULT,"Cancel",0,14,DEFAULT,DEFAULT,DEFAULT,DEFAULT` SampleDlg003 = `078,005,028,012,STATICTEXT,DEFAULT,"First name:",DEFAULT,15,DEFAULT,DEFAULT,DEFAULT,DEFAULT` SampleDlg004 = `077,020,032,012,STATICTEXT,DEFAULT,"Last Name:",DEFAULT,16,DEFAULT,DEFAULT,DEFAULT,DEFAULT` SampleDlg005 = `052,035,060,012,STATICTEXT,DEFAULT,"Street Address Line 1:",DEFAULT,17,DEFAULT,DEFAULT,DEFAULT,DEFAULT` SampleDlg006 = `052,050,060,012,STATICTEXT,DEFAULT,"Street Address Line 2:",DEFAULT,18,DEFAULT,DEFAULT,DEFAULT,DEFAULT` SampleDlg007 = `093,065,014,012,STATICTEXT,DEFAULT,"City:",DEFAULT,19,DEFAULT,DEFAULT,DEFAULT,DEFAULT` SampleDlg008 = `013,080,092,012,STATICTEXT,DEFAULT,"Canadian Postal Code (e.g. V4S 1A5):",DEFAULT,20,DEFAULT,DEFAULT,DEFAULT,DEFAULT` SampleDlg009 = `024,095,080,012,STATICTEXT,DEFAULT,"UK Postal Code (e.g. AA99 9AA):",DEFAULT,21,DEFAULT,DEFAULT,DEFAULT,DEFAULT` SampleDlg010 = `038,110,070,012,STATICTEXT,DEFAULT,"USA Zip Code (e.g. 10010):",DEFAULT,22,DEFAULT,DEFAULT,DEFAULT,DEFAULT` SampleDlg011 = `008,125,102,012,STATICTEXT,DEFAULT,"10 digit phone num (e.g. 800-555-5555):",DEFAULT,23,DEFAULT,DEFAULT,DEFAULT,DEFAULT` SampleDlg012 = `069,140,040,012,STATICTEXT,DEFAULT,"Email Address:",DEFAULT,24,DEFAULT,DEFAULT,DEFAULT,DEFAULT` SampleDlg013 = `046,155,060,012,STATICTEXT,DEFAULT,"SSN (e.g. 999-99-9999):",DEFAULT,25,DEFAULT,DEFAULT,DEFAULT,DEFAULT` SampleDlg014 = `006,170,120,012,STATICTEXT,DEFAULT,"PW (8 min, 1 UC, 1 LC, 1 num, 1 special):",DEFAULT,26,DEFAULT,DEFAULT,DEFAULT,DEFAULT` SampleDlg015 = `111,005,100,012,EDITBOX,FName,DEFAULT,DEFAULT,1,DEFAULT,DEFAULT,DEFAULT,"255|255|%C15%"` SampleDlg016 = `111,020,100,012,EDITBOX,LName,DEFAULT,DEFAULT,2,DEFAULT,DEFAULT,DEFAULT,"255|255|%C16%"` SampleDlg017 = `111,035,124,012,EDITBOX,Address1,DEFAULT,DEFAULT,3,DEFAULT,DEFAULT,DEFAULT,"255|255|%C17%"` SampleDlg018 = `111,050,124,012,EDITBOX,Address2,DEFAULT,DEFAULT,4,DEFAULT,DEFAULT,DEFAULT,"255|255|%C18%"` SampleDlg019 = `111,065,100,012,EDITBOX,City,DEFAULT,DEFAULT,5,DEFAULT,DEFAULT,DEFAULT,"255|255|%C19%"` SampleDlg020 = `111,080,034,012,EDITBOX,CPC,DEFAULT,DEFAULT,6,DEFAULT,DEFAULT,DEFAULT,"255|255|%C20%"` SampleDlg021 = `111,095,034,012,EDITBOX,UKPC,DEFAULT,DEFAULT,7,DEFAULT,DEFAULT,DEFAULT,"255|255|%C21%"` SampleDlg022 = `111,110,026,012,EDITBOX,Zip,DEFAULT,DEFAULT,8,DEFAULT,DEFAULT,DEFAULT,"255|255|%C22%"` SampleDlg023 = `111,125,040,012,EDITBOX,Phone,DEFAULT,DEFAULT,9,DEFAULT,DEFAULT,DEFAULT,"255|255|%C23%"` SampleDlg024 = `111,140,124,012,EDITBOX,Email,DEFAULT,DEFAULT,10,DEFAULT,DEFAULT,DEFAULT,"255|255|%C24%"` SampleDlg025 = `111,155,040,012,EDITBOX,SSN,DEFAULT,DEFAULT,11,DEFAULT,DEFAULT,DEFAULT,"255|255|%C25%"` SampleDlg026 = `111,170,078,012,EDITBOX,PW,DEFAULT,DEFAULT,12,DEFAULT,DEFAULT,DEFAULT,"255|255|%C26%"` ButtonPushed = Dialog("SampleDlg") Return
Article ID: W17399
File Created: 2009:12:09:11:13:16
Last Updated: 2009:12:09:11:13:16