Reputation:
Private Sub btnBillSearch_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnBillSearch.Click
If Me.txbBILL_NR.Text = "" Or Me.txbBILL_NR.TextLength >= 4 Then
Try
Search()
If Me.bsBillGrid.Current IsNot Nothing Then
Me.dgvBill.Focus()
End If
Catch ex As Exception
Utility.ExceptionManager.HandleException(ex)
End Try
Else
MessageBox.Show("enter at least 4 numbers")
End If
End Sub
I have this method for search button in my app. So, I already wrote the If condition for where user enters a minimum number of characters is 4 to select entries.
I need to one more validation for % sign. I figured out, that is kinda startWidth(), but I do not understand how I can get those situations:
I think about using startWith/endWith or regex maybe. Could anyone please give me some advice where to look at.
user adds “%” sign after txbBILL_NR - the system does not add additional “%” in the background, txbBILL_NR with identical part number are found and reflected in the list.
the user has not added the “%” sign after the txbBILL_NR - the system adds an additional “%” in the background, txbBILL_NR with identical no. parts are found and listed. The "%" character does not need to be represented by the user;
3.user added “%” sign at the beginning or middle of txbBILL_NR - the system does not add an additional “%” in the background, txbBILL_NR with identical part number are found and reflected in the list (no changes required);
The "%" system only needs to be marked if the user has entered at least 4 characters in the txbBILL_NR field (assuming that the invoice number cannot be shorter than 4 characters.
If the user has entered at least 4 characters (whether they are starting characters or from the middle) and "%" is added to the beginning or middle of these symbols, the system does not add an additional "%" in the background the invoice (s) with the identical part (symbol) part are found and reflected in the list.
Upvotes: 1
Views: 83
Reputation: 14383
I think this function meets your requirements.
Private Function SearchCriterium(ByVal Crit As String) As String
' 295
Const Mark As String = "%"
Dim Fun As String ' function return value
Fun = Crit
Do While (Len(Fun) >= 4) And (Right(Fun, 1) = Mark)
Fun = Left(Fun, Len(Fun) - 1)
Loop
If Len(Fun) < 4 Then
MsgBox "Enter at least 4 characters.", _
vbExclamation, "Invalid search crterium"
SearchCriterium = Crit
Else
If InStr(Fun, Mark) = 0 Then Fun = Fun & Mark
End If
SearchCriterium = Replace(Fun, Mark, "*")
End Function
Observe that it replaces the % sign with VBA's wild card character *
. You can remove that feature if you don't need it at that point.
The function removes any existing trailing placeholder and then adds one if none exists elsewhere in the string. Here is a list of the tests I ran.
Private Sub Test_SearchCriterium()
Debug.Print SearchCriterium("Item")
Debug.Print SearchCriterium("It%em")
Debug.Print SearchCriterium("%Item")
Debug.Print SearchCriterium("Ite%")
Debug.Print SearchCriterium("It%%")
End Sub
Upvotes: 0
Reputation: 54417
'Get raw user entry.
Dim searchText = txbBILL_NR.Text
'Get user entry without wildcards.
Dim cleanSearchText = searchText.Replace("%", String.Empty)
If cleanSearchText.Length = 0 OrElse cleanSearchText.Length >= 4 Then
If searchText = cleanSearchText Then
'There are no wildcards so append one.
searchText &= "%"
End If
'Use searchText here.
End If
Upvotes: 1