datagridview 单元格只接受数字和一些特殊字符

datagridview cell accepts only numbers and some special character

我的要求是在我的 datagridview.The 示例输入的某些列中只允许数字 .<-< 2.51-15.5>10>12.54<75

我正在使用正则表达式检查模式匹配以下是我的代码

If System.Text.RegularExpressions.Regex.IsMatch(val, "^[\d.-]+$") Then
            Return True
        Else
            Return False
        End If

但这只接受数字,.- 这意味着如果我通过 val="2.5"val="5-10"

return true

所以我的问题是如何为其他符号制作它(>,<)

你应该使用类似的东西:

If System.Text.RegularExpressions.Regex.IsMatch(val, "^\s*?[<>]?\d+?\s*?[\-]?\s*?\d+?[.]?\s*?\d+?$") Then
   Return True
Else
   Return False
End If

通过这种方式,您可以选择匹配字符串开头的 < 和 >。

编辑:通过修复,现在考虑了空格。使用此正则表达式字符串,如 1-1-1 或 2.2。不匹配。

要进行结构检查并 space 放松,您可以使用这样的东西:

^(\s*(?:[-><])?\s*\d+(?:[.]\d+)?)+$

尝试 regex demo

此接受也:1.5 - 10.3< 10但拒绝无效< 10.2.1 - ..之前接受。

更新 仅接受单数不等式(接受< 10.2但拒绝>10 <5)并在减法中接受最大2个操作数(接受1.2 - 3.4但拒绝1 -1 - 1)(如@SebastianProske 表示:

^(\s*[><]\s*\d+([.]\d+)?|\d+([.]\d+)?\s*(-?\s*\d+([.]\d+)?\s*)?)$

Regex Demo

PS:更准确地说,我们可以将所有 \s 替换为 [ \t] 以不接受换行符和其他白色 space 个字符。

没有回应 "RegEx" 问题,而是建议的替代方案。我发现 RegEx 非常浪费时间(开发、CPU 周期和维护。)这是一个来自 OAuth 示例的字符串编码器,可以使用简单的字符串作为允许的字符列表。

    Protected Function UrlEncode(ByVal value As String) As String
        Dim result As New StringBuilder()
        For Each symbol As Char In value
            If unreservedChars.IndexOf(symbol) <> -1 Then ' "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_.~"
                result.Append(symbol)
            Else
                result.Append("%" + String.Format("{0:X2}", Convert.ToInt32(symbol)))
            End If
        Next
        Return result.ToString()