J'essaie d'utiliser un regularexpressionValidator pour correspondre à une adresse IP (avec des cartes génériques possibles) pour un système de filtrage IP.
J'utilise la regex suivante: p> qui fonctionne bien lorsque vous l'exécutez à Linqpad avec regex.Matches, mais ne semble pas fonctionner lorsque j'utilise le validateur. P> Est-ce que quelqu'un a une suggestion à une meilleure regex ou Pourquoi cela fonctionnerait-il en test mais pas in situ? p> acclamations, ed p> p>
5 Réponses :
Que diriez-vous de mettre des caractères de chaîne de démarrage et d'extrémité sur l'expression
Belle suggestion mais j'ai bien peur que cela ne validait toujours pas!
[0-9] {1,3} permettrait aux adresses IP du formulaire 999.999.999.999. Votre gamme d'adresses IP doit autoriser uniquement 0 à 255.
Remplacer toutes les occurrences de [0-9] {1,3} avec
([0-9] {1,2}) | (1 [0-9] {2,2}) | (2 [0-4] [0-9]) | (25 [0-5]) < BR />
Cela me semble très compliqué et il y a probablement de meilleures façons de le faire, mais cela semble correct à première vue. P>
Je ne suis pas extrait de manière massive de l'adresse IP réelle valide, seul le format (il est plus facile d'analyser plus tard), mais point prélevé.
Ceci: \\. | \\ * \\. code> ressemble au bit dodgy. Faites cela à la place:
^((([0-9]{1,2})|(1[0-9]{2,2})|(2[0-4][0-9])|(25[0-5])|\*)\.){3}(([0-9]{1,2})|(1[0-9]{2,2})|(2[0-4][0-9])|(25[0-5])|\*)$
Une autre bonne suggestion, mais j'ai bien peur que cela ne fonctionne pas non plus!
Il le fait - essayez-le chez gskinner.com/regexr . Assurez-vous d'avoir un @ code> devant la chaîne. Si cela ne fonctionne toujours pas, montrez-nous le code que vous utilisez pour la correspondre. Notez que j'essaie de le faire correspondre aux choses comme
192.168. *. * Et code> 10. *. *. * `- Est-ce ce que vous voulez? Pouvez-vous nous montrer des cas de test?
Je ne pense pas que vous ayez lu ma question à droite: mon regex initial correspondra à une adresse IPv4 avec des caractères génériques sans souci, mais cela ne fonctionnera pas dans une ASP: RegularexpressionValidator. Votre regex a exactement le même problème.
Avez-vous essayé votre regex d'origine, mais le remplacement du backslash évasé \ \ \ \ \ \ \ \ `avec un code>` (sans utiliser le caractère C #
@ code> échappatoire)? (c.-à-d. Essayez
^ (([0-9] {1,3} | \ * *) \.) {3} ([0-9] {1,3} | \ *) $ code> ou
(([0-9] {1,3} | \ *) \.) {3} ([0-9] {1,3} | \ *) code>)
@Vearr nous avons un gagnant. Toujours oublier que vous n'êtes pas obligé de vous échapper dans les validateurs Regex! Cheers, vous devriez mettre cela comme une réponse séparée afin que je puisse l'accepter.
ASP: RegularexpressionValidator code> ne nécessite pas de double-échapper aux backslashes. Vous devriez essayer: p>
([0-9] {1,3} \. | \ * \.) {3} ([0-9] {1,3} | \ *) {1} code> p>
Ma réponse est générale pour .NET, pas chaîne de regex pour la correspondance IP (utilisez en fonction du cas d'utilisation particulière, vous pouvez ajouter des ancrages appropriés, c'est-à-dire (N'oubliez pas de doubler regularexpressionvalidator code> -pecific.
explicicicitCapture Code> Pour éviter tout capture inutile et conserver : p>
\ a code> ou
^ code> Début et
\ z code> ou
$ code> à la fin. Ensuite, vous pouvez supprimer les limites de mots requises:
\ b code>. P>
\ code> à l'intérieur de la chaîne) p> p>
Pouvez-vous fournir des cas de test où il ne correspond pas correctement?
@Veearr, je n'ai pas encore de faire valider correctement, donc toute chaîne arbitraire, y compris les adresses IP: D