Simple Email Parsing Code
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
This function takes the contents of "$USEREMAILADDRESS" and then sets the error flag, if the email address did not meet the simple validation rules. This covers pretty much all you could check, just by looking at an email address as a text string, and without any online verification.