Hi there,
Can someone help me with the code below. I want to check a licenceplate with Regular Expression.
This lincenceplate "999XX9". matched with array[13].
Can some one explane me why this fault? If regexp:IsMatch(kenteken, array(i)) Then Message i View-as Alert-box Info Buttons Ok.
Using System.Text.RegularExpressions.*. Define Variable kenteken As Character No-undo Initial "999XX9". Define Variable i As Integer No-undo. Define Variable array As Character Extent 14 No-undo. Define Variable regexp As Class Regex No-undo. array = "^[A-Za-z][A-Za-z][0-9][0-9][0-9][0-9]$". array[1] = "^[0-9][0-9][0-9][0-9][A-Za-z][A-Za-z]$". array[2] = "^[0-9][0-9][A-Za-z][A-Za-z][0-9][0-9]$". array[3] = "^[A-Za-z][A-Za-z][0-9][0-9][A-Za-z][A-Za-z]$". array[4] = "^[A-Za-z][A-Za-z][A-Za-z][A-Za-z][0-9][0-9]$". array[5] = "^[0-9][0-9][A-Za-z][A-Za-z][A-Za-z][A-Za-z]$". array= "^[0-9][0-9][A-Za-z][A-Za-z][A-Za-z][0-9]$". array[7] = "^[0-9][A-Za-z][A-Za-z][A-Za-z][0-9][0-9]$". array
= "^[A-Za-z][A-Za-z][0-9][0-9][0-9][A-Za-z]$". array[9] = "^[A-Za-z][0-9][0-9][0-9][A-Za-z][A-Za-z]$". array[10] = "^[A-Za-z][A-Za-z][A-Za-z][0-9][0-9][A-Za-z]$". array[11] = "^[A-Za-z][0-9][0-9][A-Za-z][A-Za-z][A-Za-z]$". array[12] = "^[0-9][A-Za-z][A-Za-z][0-9][0-9][0-9]$". array[13] = "^[0-9][0-9][0-9][A-Za-z][A-Za-z][0-9]$". Do i = 0 To 13: If regexp:IsMatch(kenteken, array) Then Message i View-as Alert-box Info Buttons Ok. End. Delete Object regexp.
the code below in .net is nice but i have to translate it to ABL.
Public Class VehicleFunctions Public Shared Function GetSidecodeLicenseplate(ByVal Licenseplate As String) As String Dim arrSC(13) As String Dim scUitz As String = String.Empty Licenseplate = Licenseplate.Replace("-", "").ToUpper arrSC(0) = "^[a-zA-Z]{2}[\d]{2}[\d]{2}$" ' 1 XX-99-99 arrSC(1) = "^[\d]{2}[\d]{2}[a-zA-Z]{2}$" ' 2 99-99-XX arrSC(2) = "^[\d]{2}[a-zA-Z]{2}[\d]{2}$" ' 3 99-XX-99 arrSC(3) = "^[a-zA-Z]{2}[\d]{2}[a-zA-Z]{2}$" ' 4 XX-99-XX arrSC(4) = "^[a-zA-Z]{2}[a-zA-Z]{2}[\d]{2}$" ' 5 XX-XX-99 arrSC(5) = "^[\d]{2}[a-zA-Z]{2}[a-zA-Z]{2}$" ' 6 99-XX-XX arrSC(6) = "^[\d]{2}[a-zA-Z]{3}[\d]{1}$" ' 7 99-XXX-9 arrSC(7) = "^[\d]{1}[a-zA-Z]{3}[\d]{2}$" ' 8 9-XXX-99 arrSC(8) = "^[a-zA-Z]{2}[\d]{3}[a-zA-Z]{1}$" ' 9 XX-999-X arrSC(9) = "^[a-zA-Z]{1}[\d]{3}[a-zA-Z]{2}$" ' 10 X-999-XX arrSC(10) = "^[a-zA-Z]{3}[\d]{2}[a-zA-Z]{1}$" ' 11 XXX-99-X arrSC(11) = "^[a-zA-Z]{1}[\d]{2}[a-zA-Z]{3}$" ' 12 X-99-XXX arrSC(12) = "^[\d]{1}[a-zA-Z]{2}[\d]{3}$" ' 13 9-XX-999 arrSC(13) = "^[\d]{3}[a-zA-Z]{2}[\d]{1}$" ' 14 999-XX-9 'except licenseplates for diplomats scUitz = "^CD[ABFJNST][0-9]{1,3}$" 'for example: CDB1 of CDJ45 For i As Integer = 0 To 13 If System.Text.RegularExpressions.Regex.IsMatch(Licenseplate, arrSC(i)) Then Return (i + 1).ToString End If Next If System.Text.RegularExpressions.Regex.IsMatch(Licenseplate, scUitz) Then Return "CD" End If Return String.Empty End Function Public Shared Function FormatLicenseplate(ByVal Licenseplate As String, ByVal Sidecode As String) As String Licenseplate = Licenseplate.Replace("-", "").ToUpper Select Case Sidecode Case "1", "2", "3", "4", "5", "6" Return Licenseplate.Substring(0, 2) & "-" & Licenseplate.Substring(2, 2) & "-" & Licenseplate.Substring(4, 2) Case "7", "9" Return Licenseplate.Substring(0, 2) & "-" & Licenseplate.Substring(2, 3) & "-" & Licenseplate.Substring(5, 1) Case "8", "10" Return Licenseplate.Substring(0, 1) & "-" & Licenseplate.Substring(1, 3) & "-" & Licenseplate.Substring(4, 2) Case "11", "14" Return Licenseplate.Substring(0, 3) & "-" & Licenseplate.Substring(3, 2) & "-" & Licenseplate.Substring(5, 1) Case "12", "13" Return Licenseplate.Substring(0, 1) & "-" & Licenseplate.Substring(1, 2) & "-" & Licenseplate.Substring(3, 3) Case Else 'No formatting with sidecode 'CD' Return Licenseplate End Select End Function End Class
A couple of things
- Generally, C# versions example of .net code translate more cleanly to ABL.
- Arrays in ABL are 1-based, so you have to start at array[1].
- You should loop i = 1 to 14.
- Regex:IsMatch() is a static member, so you don't need an instance variable defined. Just call Regex:IsMatch().
- You'll need USING (import) statements at the top of your code (using System.Text.RegularExpressions.*. in particular)
- Remove the 'delete object' line
Peter,
Thanks for your post. I think I was sleeping. This working fine now :)
Using System.Text.RegularExpressions.*.
Define Variable kenteken As Character No-undo Initial "999XX9".
Define Variable i As Integer No-undo.
Define Variable array As Character Extent 14 No-undo.
array[1] = "^[A-Za-z][A-Za-z][0-9][0-9][0-9][0-9]$".
array[2] = "^[0-9][0-9][0-9][0-9][A-Za-z][A-Za-z]$".
array[3] = "^[0-9][0-9][A-Za-z][A-Za-z][0-9][0-9]$".
array[4] = "^[A-Za-z][A-Za-z][0-9][0-9][A-Za-z][A-Za-z]$".
array[5] = "^[A-Za-z][A-Za-z][A-Za-z][A-Za-z][0-9][0-9]$".
array= "^[0-9][0-9][A-Za-z][A-Za-z][A-Za-z][A-Za-z]$".
array[7] = "^[0-9][0-9][A-Za-z][A-Za-z][A-Za-z][0-9]$".
array= "^[0-9][A-Za-z][A-Za-z][A-Za-z][0-9][0-9]$".
array[9] = "^[A-Za-z][A-Za-z][0-9][0-9][0-9][A-Za-z]$".
array[10] = "^[A-Za-z][0-9][0-9][0-9][A-Za-z][A-Za-z]$".
array[11] = "^[A-Za-z][A-Za-z][A-Za-z][0-9][0-9][A-Za-z]$".
array[12] = "^[A-Za-z][0-9][0-9][A-Za-z][A-Za-z][A-Za-z]$".
array[13] = "^[0-9][A-Za-z][A-Za-z][0-9][0-9][0-9]$".
array[14] = "^[0-9][0-9][0-9][A-Za-z][A-Za-z][0-9]$".
Do i = 1 To 14:
If Regex:IsMatch(kenteken,array) Then Message kenteken array
View-as Alert-box Info Buttons Ok.
End.