Email Validation Function

From NSIS Wiki
Revision as of 18:56, 8 March 2007 by 99999999 (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigationJump to search

= CheckUserEmailAddress

== This function is useful for checking the format of an email address. Then returning an error if it doesn't meet minimum requirements.

VAR $USEREMAILADDRESS
Function CheckUserEmailAddress
   StrCpy $R1 $USEREMAILADDRESS
   StrCpy $R2 ""
   StrCpy $R3 ""
   #count the number of @'s more than one is invalid, less than one is invalid
   ${WordFind} "$USEREMAILADDRESS" "@" "*" $R1
   StrCmp "1" "$R1" lbl_check2 lbl_error
lbl_check2:
   #count the number of words delimited by @ it should be 2.
   ${WordFind} "$USEREMAILADDRESS" "@" "#" $R1
   StrCmp "2" "$R1" lbl_check3 lbl_error
lbl_check3:
   #Split the words into user and domain
   ${WordFind} "$USEREMAILADDRESS" "@" "0" $R2
   ${WordFind} "$USEREMAILADDRESS" "@" "1" $R3
   #Determine if either of the fields contain special RFC822 characters
   ${StrFilter} "$R2" "" "" '()<>,;:\"[]' $R1
   StrCmp "$R2" "$R1" 0 lbl_error
   ${StrFilter} "$R3" "" "" '()<>,;:\"[]' $R1
   StrCmp "$R3" "$R1" 0 lbl_error
lbl_check4:
   #Determine the number of fields in user and domain, check to see 
   #the number of delimiter is one less than the number of words.
   ${WordFind} "$R2" "." "*" $R5
   ${WordFind} "$R2" "." "#" $R6
   IntOp $R5 $R5 + 1
   StrCmp "$R5" "$R6" 0 lbl_error
   ${WordFind} "$R3" "." "*" $R5
   ${WordFind} "$R3" "." "#" $R6
   IntOp $R5 $R5 + 1
   StrCmp "$R5" "$R6" lbl_check5 lbl_error
lbl_check5:
   # make sure there is at least one "." in the domain section.
   ${WordFind} "$R3" "." "*" $R1
   IntCmp 1 $R1 lbl_end lbl_end lbl_error
   goto lbl_end
lbl_error:
   SetErrors
lbl_end:
FunctionEnd