Rather than try and re-invent the wheel, I am wondering if any members have, or know where in can be obtained, validating code for entering postcodes into a field.
Thanks in advance.
Thanks in advance.
Alpha Software Mobile Development Tools: Alpha Anywhere | Alpha TransForm |
if ValidPostcode(upper(a_field_value) = .F. then cancel() end if
FUNCTION ValidPostcode as L (vcPostCode as C) 'Checks whether postcode structure is valid 'Created by Tony Rutherford 10/9/06 'Based on information at http://www.govtalk.gov.uk/gdsc/html/frames/PostCode.htm 'Copyright Tony Rutherford 2006 'Declare & initialise variables DIM vcPostCode as C 'user input DIM i as N 'counter DIM vcChar as C 'character value DIM vnAscii as N 'ascii code value DIM vcFormat as C 'format of postcode DIM vnSpacePos as N 'position of space in postcode 'Check for special code IF vcPostCode = "GIR 0AA" THEN ValidPostcode = .T. EXIT FUNCTION END IF 'Check for multiple spaces IF at(" ", vcPostCode) <> 0 THEN msgbox("Error!", "Postcode cannot contain multiple spaces", UI_STOP_SYMBOL + UI_OK) ValidPostcode = .F. EXIT FUNCTION END IF 'Check for leading/trailing spaces IF vcPostCode <> ltrim(vcPostCode) THEN msgbox("Error!", "Postcode must not have leading spaces.", UI_STOP_SYMBOL + UI_OK) ValidPostcode = .F. EXIT FUNCTION END IF 'Check number of words IF w_count(vcPostCode) <> 2 THEN msgbox("Error!", "Postcode must have two parts separated by a space.", UI_STOP_SYMBOL + UI_OK) ValidPostcode = .F. EXIT FUNCTION END IF 'Check structure FOR i = 1 to len(vcPostCode) vcChar = substr(vcPostCode, i, 1) vnAscii = asc(vcChar) IF vnAscii >= 65 .and. vnAscii <= 90 THEN vcFormat = vcFormat + "A" ELSEIF vnAscii >= 48 .and. vnAscii <= 57 then vcFormat = vcFormat + "N" ELSEIF vcChar = " " then vcFormat = vcFormat + " " ELSE msgbox("Error!", "Postcode must have two parts separated by a space. Only letters and numbers can be used.", UI_STOP_SYMBOL + UI_OK) ValidPostcode = .F. EXIT FUNCTION END IF NEXT i IF .not. word_exists("AN NAA,ANN NAA,AAN NAA,AANN NAA,ANA NAA,AANA NAA", vcFormat, ",") THEN msgbox("Error!", "Postcode must be in one of the following forms: AN NAA,ANN NAA,AAN NAA,AANN NAA,ANA NAA,AANA NAA, where A is a letter and N is a number.", UI_STOP_SYMBOL + UI_OK) ValidPostcode = .F. EXIT FUNCTION END IF 'Check 1st character vcChar = left(vcPostCode, 1) IF vcChar $ "QVX" THEN msgbox("Error!", "The first character cannot be Q, V or X.", UI_STOP_SYMBOL + UI_OK) ValidPostcode = .F. EXIT FUNCTION END IF 'Check 2nd character IF substr(vcFormat, 2, 1) = "A" THEN vcChar = substr(vcPostCode, 2, 1) IF vcChar $ "IJZ" THEN msgbox("Error!", "The second character cannot be I, J or Z.", UI_STOP_SYMBOL + UI_OK) ValidPostcode = .F. EXIT FUNCTION END IF END IF 'Check 3rd character IF substr(vcFormat, 3, 1) = "A" THEN vcChar = substr(vcPostCode, 3, 1) IF .not. (vcChar $ "ABCDEFGHJKSTUW") THEN msgbox("Error!", "The third character must be A, B, C, D, E, F, G, H, J, K, S, T, U or W.", UI_STOP_SYMBOL + UI_OK) ValidPostcode = .F. EXIT FUNCTION END IF END IF 'Check 4th character IF substr(vcFormat, 4, 1) = "A" THEN vcChar = substr(vcPostCode, 4, 1) IF .not. (vcChar $ "ABEHMNPRVWXY") THEN msgbox("Error!", "The fourth character must be A, B, E, H, M, N, P, R, V, W, X or Y.", UI_STOP_SYMBOL + UI_OK) ValidPostcode = .F. EXIT FUNCTION END IF END IF 'Check 2nd half vnSpacePos = at(" ", vcPostCode) FOR i = 1 to 2 vcChar = substr(vcPostCode, vnSpacePos + i + 1, 1) IF vcChar $ "CIKMOV" THEN msgbox("Error!", "The characters in the second part of the postcode cannot be C, I, K, M, O or V.", UI_STOP_SYMBOL + UI_OK) ValidPostcode = .F. EXIT FUNCTION END IF NEXT i ValidPostcode = .T. END FUNCTION
FUNCTION ValidPostcode2 as C (vcPostCode as C) 'Checks whether postcode structure is valid and returns either "OK" or error message as result 'Created by Tony Rutherford 10/9/06 'Based on information at http://www.govtalk.gov.uk/gdsc/html/frames/PostCode.htm 'Copyright Tony Rutherford 2006 'Declare & initialise variables DIM vcPostCode as C 'user input DIM i as N 'counter DIM vcChar as C 'character value DIM vnAscii as N 'ascii code value DIM vcFormat as C 'format of postcode DIM vnSpacePos as N 'position of space in postcode 'Check for special code IF vcPostCode = "GIR 0AA" THEN ValidPostcode2 = .T. EXIT FUNCTION END IF 'Check for multiple spaces IF at(" ", vcPostCode) <> 0 THEN ValidPostcode2 = "Postcode cannot contain multiple spaces" EXIT FUNCTION END IF 'Check for leading/trailing spaces IF vcPostCode <> ltrim(vcPostCode) THEN ValidPostcode2 ="Postcode must not have leading spaces." EXIT FUNCTION END IF 'Check number of words IF w_count(vcPostCode) <> 2 THEN ValidPostcode2 = "Postcode must have two parts separated by a space." EXIT FUNCTION END IF 'Check structure FOR i = 1 to len(vcPostCode) vcChar = substr(vcPostCode, i, 1) vnAscii = asc(vcChar) IF vnAscii >= 65 .and. vnAscii <= 90 THEN vcFormat = vcFormat + "A" ELSEIF vnAscii >= 48 .and. vnAscii <= 57 then vcFormat = vcFormat + "N" ELSEIF vcChar = " " then vcFormat = vcFormat + " " ELSE ValidPostcode2 = "Postcode must have two parts separated by a space. Only letters and numbers can be used" EXIT FUNCTION END IF NEXT i IF .not. word_exists("AN NAA,ANN NAA,AAN NAA,AANN NAA,ANA NAA,AANA NAA", vcFormat, ",") THEN ValidPostcode2 ="Postcode format must be: AN NAA,ANN NAA,AAN NAA,AANN NAA,ANA NAA,AANA NAA" EXIT FUNCTION END IF 'Check 1st character vcChar = left(vcPostCode, 1) IF vcChar $ "QVX" THEN ValidPostcode2 = "The first character cannot be Q, V or X." EXIT FUNCTION END IF 'Check 2nd character IF substr(vcFormat, 2, 1) = "A" THEN vcChar = substr(vcPostCode, 2, 1) IF vcChar $ "IJZ" THEN ValidPostcode2 = "The second character cannot be I, J or Z." EXIT FUNCTION END IF END IF 'Check 3rd character IF substr(vcFormat, 3, 1) = "A" THEN vcChar = substr(vcPostCode, 3, 1) IF .not. (vcChar $ "ABCDEFGHJKSTUW") THEN ValidPostcode2 = "The third character must be A, B, C, D, E, F, G, H, J, K, S, T, U or W." EXIT FUNCTION END IF END IF 'Check 4th character IF substr(vcFormat, 4, 1) = "A" THEN vcChar = substr(vcPostCode, 4, 1) IF .not. (vcChar $ "ABEHMNPRVWXY") THEN ValidPostcode2 ="The fourth character must be A, B, E, H, M, N, P, R, V, W, X or Y." EXIT FUNCTION END IF END IF 'Check 2nd half vnSpacePos = at(" ", vcPostCode) FOR i = 1 to 2 vcChar = substr(vcPostCode, vnSpacePos + i + 1, 1) IF vcChar $ "CIKMOV" THEN ValidPostcode2 = "The characters in the second part of the postcode cannot be C, I, K, M, O or V." EXIT FUNCTION END IF NEXT i ValidPostcode2 = "OK" END FUNCTION
Comment