2009-06-12 190 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...