Feeds:
Posts
Comments

Posts Tagged ‘regex’

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

Read Full Post »

%d bloggers like this: