1

我的要求是在我的datagridview的某些列中只允许数字.、、、和。示例输入是<、、、、等-<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"或返回 trueval="5-10"

所以我的问题是如何为其他符号(><

4

3 回答 3

1

要进行结构检查并放松空间,您可以使用以下内容:

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

尝试正则表达式演示

这个accept还:1.5 - 10.3或者< 10但是之前的reject无效< 10.2.或者1 - ..accepted。

更新 仅接受单个数字不等式(接受< 10.2但拒绝)并在减法中>10 <5接受最大操作数(接受但拒绝)(如@SebastianProske所述):21.2 - 3.41 -1 - 1

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

正则表达式演示

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

于 2016-01-08T10:30:29.293 回答
1

你应该使用类似的东西:

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 这样的正则表达式字符串。不匹配。

于 2016-01-08T10:21:08.193 回答
0

不响应“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()
于 2016-01-08T15:19:18.663 回答