Validation "Programming today is a race between software engineers striving to build bigger and better idiot-proof programs and the Universe trying to produce bigger and better idiots. So far, the Universe is winning.“ Rich Cook Robust and Responsive Robust means that a user may type any data they like into the program and it won’t crash Responsive means that the program will tell the user what they have done wrong and what they should do to correct the error What is wrong with the following? Dim FirstName as Integer FirstName=”Fred” What is wrong with the following? Dim Age as Integer Age = txtAge.Text IsNumeric ‘declare a variable to store the age Dim Age as Integer ‘test the data typed in the text box to see if it is a number If IsNumeric(txtAge.Text)=True Then ‘if it is ok read in the value Age = txtAge.Text Else ‘if not ok then show an error lblError.Text = "The age is not valid" End If IsDate ‘declare a variable to store the date of birth Dim DOB as Date ‘test the data typed in the text box to see if it is a date If IsDate(txtDOB.Text)=True Then ‘if it is ok read in the value DOB = txtDOB.Text Else ‘if not ok then show an error lblError.Text = "The date of birth is not a valid date" End If Testing for a blank field (=“”) ‘declare a variable to store first name Dim FirstName as String ‘test the data typed in the text box to see if it isn’t blank If txtFirstName.Text<>"" Then ‘if it is ok read in the value FirstName = txtFirstName.Text Else ‘if not ok then show an error lblError.Text = "You must enter your first name." End If Testing Number of Characters (Len) ‘declare a variable to store first name Dim FirstName as String ‘test the data typed in the text box is not over 20 characters If Len(txtFirstName.Text)<=20 Then ‘if it is ok read in the value FirstName = txtFirstName.Text Else ‘if not ok then show an error lblError.Text = "First name must not exceed 20 letters." End If Validating an Email Address (InStr) ‘declare a variable to store the email address Dim EMail as String ‘test the data typed in the text box has an @ symbol If InStr(txtEMail.Text, "@") >0 Then ‘if it is ok read in the value EMail = txtEMail.Text Else ‘if not ok then show an error lblError.Text = "Not a valid email address." End If Question – What is the problem with the above code? The problem is… that the following are all valid email addresses.. fred@ @fred@ @ @@ @@@@@@@@ An Email Address Must Have… “@” symbol e.g. @hotmail.com . “ ” symbol e.g. hotmail.com At least 5 characters (?) (What is wrong with the following if we use fred@nothing ?) Dim EMail as String ‘test the data typed in the text box has an @ symbol If InStr(txtEMail.Text, "@") >0 Then EMail = txtEMail.Text Else lblError.Text = "Not a valid email address." End If ‘test the address is long enough If Len(txtEMail.Text) >5 Then EMail = txtEMail.Text Else lblError.Text = "The address is too short." End If ‘test the data typed in the text box has an . symbol If InStr(txtEMail.Text, ".") >0 Then EMail = txtEMail.Text Else lblError.Text = "Not a valid email address." End If Better??? ‘declare a variable to store the email address Dim EMail as String ‘test the data typed in the text box has an @ symbol If InStr(txtEMail.Text, "@") >0 Then ‘test the address is long enough If Len(txtEMail.Text) >5 Then ‘test the data typed in the text box has an . symbol If InStr(txtEMail.Text, ".") >0 Then ‘if it is ok read in the value EMail = txtEMail.Text Else lblError.Text = "Not a valid email address." End If Else lblError.Text = "The address is too short." End If Else lblError.Text = "Not a valid email address no @ symbol." End If Or…. ‘declare a variable to store the email address Dim EMail as String ‘clear the error message label lblError.Text = "" ‘test the data typed in the text box has an @ symbol If InStr(txtEMail.Text, "@") = 0 Then lblError.Text = "No @ symbol." End If ‘test the address is long enough If Len(txtEMail.Text) <=5 Then lblError.Text = lblError.Text & " The address is too short." End If ‘test the data typed in the text box has a . symbol If InStr(txtEMail.Text, ".") = 0 Then lblError.Text = lblError.Text & "No dot." End If If lblError.Text = "" Then Email = txtEmail.Text End IF Validation in Action We shall look at the validation for the save button on “your details” Questions 1. What is wrong with the following validation? Dim Age as Integer Age = txtAge.Text If IsNumeric(Age) = True Then If Age > 18 Then lblMessage.Text = “You are old enough” End If End If Questions 2. Write code that validates if the text in txtName is less than 40 characters. If the length of the name is OK then a message should appear welcoming the person. 3. Write code that validates the text in txtPostCode to ensure that it is not blank. 4. Write code that validates the values in the fields, txtStartAge and txtEndAge also making sure that the start age is not greater than or equal to the end age.