2009-06-12 95 views
0

我在尝试构建一个函数,该函数将返回动态创建的正则表达式。创建的正则表达式将是两个数字之间的范围检查。到目前为止,我有类似的东西(尚未完成)。构建动态正则表达式

此方法是否有效,还是我忽略了一种更简单的方法?

Public Shared Function Range(ByVal Minimum As Integer, ByVal Maximum As Integer) As String 
Return "^([" & Minimum.ToString.PadLeft(2, "0") & "]" & Microsoft.VisualBasic.StrDup(Minimum.ToString.Length, "[0-9]") & "|2[0-4][0-9]|25[0-5])$" 
End Function 
+0

通过代码片段您提供...你试图检查一个IP地址(因为RegEx的最后一部分是2 [0-4] [0-9] | 25 [0-5]) – 2009-06-12 12:58:16

+0

不是它的IP地址,它只是一个范围到255进行初始测试,本质上这将测试一个有效整数的正整数范围(最多2,147,483,647) – Paul 2009-06-12 13:02:06

回答

1

我真的这样做没有一个正则表达式:

Public Shared Function CheckRange(ByVal valueToCheck As String, ByVal Minimum As Integer, Byval Maximum As Integer) As Boolean 
    Dim value As Integer 
    If Not Integer.TryParse(valueToCheck, value) Then ''//should include a IFormatProvider as well 
     ''//Throw exception! 
     Return False 
    End If 

    Return Minimum <= value AndAlso value <= Maximum 
End Function 
+0

我认为这将是一个更简单的方法。为了重用这段特定的代码,我需要一个正则表达式。 Paul。 – Paul 2009-06-12 12:52:34

0

是验证数字的实际价值范围内的表达?

如果是这样,您可能想要实际捕获组中的值并单独验证它们。正则表达式是用于评估字符串,而不是数字,因此,例如...

Regex.Match(str, "^[10-20]$") //isn't going to match for 15 

通过捕获组用这个作为一个例子...

Dim value As String = "Value:45" 
Dim str As String = Regex.Match(value, "^Value:(?<value>\d+)$").Groups("value").Value 

//str should be "45", which now you can parse as an integer 
Integer.TryParse(...etc...