user15060642
user15060642

Reputation:

visual basic: user inputs a % sign after text

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.

  1. 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.

  2. 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);

  1. 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.

  2. 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

Answers (2)

Variatus
Variatus

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

jmcilhinney
jmcilhinney

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

Related Questions