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.