Match regex
is a great addition to 4Dv11, but what I really need is a function that takes a string value, a data type and tells me if it’s valid or not.
I’m no regex expert, just compiled some online examples into one function. This is only a starting point, but it completes my needs for the time being. There is a whole forum section devoted to this online.
` ---------------------------------------------------- ` User name (OS): ` Date and time: 11/02/10, 15:29:39 ` ---------------------------------------------------- ` Method: UTIL_ValidateDataByType ` Description ` We want to have a method that will validate data by it's type ` ` Parameters ` ---------------------------------------------------- `$0 returns true or false based on validity `$1 text data to validate cast as String `$2 longint type of data expected `$3 boolean show alerts (optional) assumed false C_BOOLEAN($0;$vb_Return;$3;$vb_ShowAlerts) C_TEXT($1;$vt_Data;$vt_Pattern) C_LONGINT($2;$vl_DataType;$vl_ParameterCount) ` count the parameters $vl_ParameterCount:=Count parameters ` assume we'll fail $vb_Return:=False ` assume we don't want to see alerts $vb_ShowAlerts:=False If ($vl_ParameterCount>=2) ` lets check them $vt_Data:=$1 $vl_DataType:=$2 If ($vl_ParameterCount>=3) $vb_ShowAlerts:=$3 End if Case of : ($vl_DataType=Is Alpha Field ) | ($vl_DataType=Is Text ) ` we passed in a string didn't we? $vb_Return:=True : ($vl_DataType=Is Boolean ) $vt_Data:=Lowercase($vt_Data) Case of : (($vt_Data="true") | ($vt_Data="false")) ` expecting "true" or "false" $vb_Return:=True : ($vb_ShowAlerts) ALERT("Expecting 'True' or 'False' not "+$vt_Data) End case : ($vl_DataType=Is Integer ) | ($vl_DataType=Is LongInt ) ` integer only, no size restriction $vt_Pattern:="[-+]?\\b\\d+\\b" Case of : (Match regex($vt_Pattern;$vt_Data)) $vb_Return:=True : ($vb_ShowAlerts) ALERT("Expecting signed integer not "+$vt_Data) End case : (($vl_DataType=Is Real ) | ($vl_DataType=Is Float )) `decimal $vt_Pattern:="[-+]?((\\b[0-9]+)?\\.)?[0-9]+\\b" Case of : (Match regex($vt_Pattern;$vt_Data)) $vb_Return:=True : ($vb_ShowAlerts) ALERT("Expecting decimal value not "+$vt_Data) End case : ($vl_DataType=Is Date ) ` Date d/m/yy and dd/mm/yyyy 1/1/00 through 31/12/99 and 01/01/1900 through 31/12/2099 ` ie europeon or american style dates accepted, deliminated with '-' ' ' '/' OR '.' $vt_Pattern:="\\b(0?[1-9]|[12][0-9]|3[01])[- /.](0?[1-9]|1[012])[- /.](19|20)?[0-9]{2}\\b" Case of : (Match regex($vt_Pattern;$vt_Data;1)) $vb_Return:=True : ($vb_ShowAlerts) ALERT("Expecting d/m/yy or dd/mm/yyyy not "+$vt_Data) End case : ($vl_DataType=Is Time ) ` Time in 24 hours format with optional seconds $vt_Pattern:="^(([0-1]?[0-9])|([2][0-3])):([0-5]?[0-9])(:([0-5]?[0-9]))?$" Case of : (Match regex($vt_Pattern;$vt_Data)) $vb_Return:=True : ($vb_ShowAlerts) ALERT("Expecting HH:MM or HH:MM:SS in 24hr format not "+$vt_Data) End case Else ` not checking blobs, pictures, subtables. just move on $vb_Return:=True End case Else $vb_Return:=False End if $0:=$vb_Return