问题描述
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
我的应用中有这种搜索按钮的方法。 所以,我已经写了 If 条件,用户输入最少字符数是 4 来选择条目。
我需要对 % 符号再进行一次验证。我想通了,这有点像 startWidth(),但我不明白我是如何得到这些情况的:
我考虑使用 startWith/endWith 或正则表达式。 任何人都可以给我一些建议在哪里看。
-
用户在 txbBILL_NR 后添加“%”符号 - 系统不会在后台添加额外的“%”, 找到并反映在列表中的 txbBILL_NR 具有相同的部件号。
-
用户没有在 txbBILL_NR 后添加“%”符号——系统在后台添加了一个额外的“%”, txbBILL_NR 具有相同的编号。零件被找到并列出。 “%”字符不需要由用户表示;
3.user 在 txbBILL_NR 的开头或中间添加了“%”符号——系统不会在后台添加额外的“%”, 找到具有相同零件编号的 txbBILL_NR 并将其反映在列表中(无需更改);
解决方法
'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
,
我认为此功能符合您的要求。
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
观察它用 VBA 的通配符 *
替换了 % 符号。如果您当时不需要该功能,可以将其删除。
该函数删除任何现有的尾随占位符,然后在字符串中的其他地方不存在时添加一个。这是我运行的测试列表。
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