2009-06-12 10 views
0

Je tente de créer une fonction qui renvoie une expression régulière créée dynamiquement. L'expression rationnelle à créer sera une vérification de distance entre deux nombres. Jusqu'à présent, j'ai quelque chose de similaire à cela (pas encore fini).Création d'une expression régulière dynamique

Cette approche est-elle valide, ou y a-t-il un moyen plus facile que je néglige?

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

par l'extrait de code que vous avez fourni ... Êtes-vous essayer de vérifier une adresse IP (comme la dernière partie du RegEx est 2 [0-4] [0-9] | 25 [0-5]) –

+0

Non c'est pas pour une adresse IP, c'est juste pour une gamme à 255 pour les tests initiaux, essentiellement ce serait de tester la gamme positive complète d'un entier valide (jusqu'à 2 147 483 647) – Paul

Répondre

1

Je voudrais vraiment faire ça sans regex:

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

Je réalise que ce serait un moyen plus facile de le faire. Pour la réutilisation de cette section particulière du code, j'ai besoin d'une regex. Paul. – Paul

+0

+1 - Même si je me souviens que quelqu'un ici était assez fou pour construire une fonction qui crée des regexes qui vérifient des plages entières ... – Tomalak

+0

Peut-être qu'un changement de conception est sur les cartes. Cela semble trop complexe pour quelque chose de si simple dans le code régulier. – Paul

0

est l'expression pour valider la valeur de portée réelle des chiffres?

Si tel est le cas, vous souhaiterez peut-être capturer les valeurs dans des groupes et les valider individuellement. RegEx est pour l'évaluation des chaînes, pas des nombres, donc par exemple ...

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

par des groupes capturant l'utiliser comme un exemple ...

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... 
+0

Il s'agit de valider les valeurs de plage réelles. Yep et Eek. – Paul