Построение динамического регулярного выражения - PullRequest
0 голосов
/ 12 июня 2009

Я пытаюсь создать функцию, которая будет возвращать регулярное выражение, которое создается динамически. Регулярное выражение для создания будет проверкой диапазона между двумя числами. Пока что у меня есть нечто похожее на это (еще не закончено).

Является ли этот подход действительным или есть более простой способ, который я пропускаю?

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

Ответы [ 2 ]

1 голос
/ 12 июня 2009

Я бы действительно сделал это без регулярного выражения:

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 голосов
/ 12 июня 2009

Является ли выражение для проверки действительного значения диапазона чисел?

Если это так, вы можете собирать значения в группы и проверять их по отдельности. RegEx предназначен для оценки строк, а не чисел, например ...

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...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...