6
votes

Expression régulière pour correspondre à l'adresse IP + wildcard

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: xxx

qui fonctionne bien lorsque vous l'exécutez à Linqpad avec regex.Matches, mais ne semble pas fonctionner lorsque j'utilise le validateur.

Est-ce que quelqu'un a une suggestion à une meilleure regex ou Pourquoi cela fonctionnerait-il en test mais pas in situ?

acclamations, ed


2 commentaires

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


5 Réponses :


1
votes

Que diriez-vous de mettre des caractères de chaîne de démarrage et d'extrémité sur l'expression xxx


1 commentaires

Belle suggestion mais j'ai bien peur que cela ne validait toujours pas!



2
votes

[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.


1 commentaires

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é.



4
votes

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])|\*)$


5 commentaires

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 @ 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 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 ` (sans utiliser le caractère C # @ échappatoire)? (c.-à-d. Essayez ^ (([0-9] {1,3} | \ * *) \.) {3} ([0-9] {1,3} | \ *) $ ou (([0-9] {1,3} | \ *) \.) {3} ([0-9] {1,3} | \ *) )


@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.



3
votes

ASP: RegularexpressionValidator ne nécessite pas de double-échapper aux backslashes. Vous devriez essayer:

([0-9] {1,3} \. | \ * \.) {3} ([0-9] {1,3} | \ *) {1}


0 commentaires

0
votes

Ma réponse est générale pour .NET, pas regularexpressionvalidator -pecific.

chaîne de regex pour la correspondance IP (utilisez explicicicitCapture Pour éviter tout capture inutile et conserver : xxx

en fonction du cas d'utilisation particulière, vous pouvez ajouter des ancrages appropriés, c'est-à-dire \ a ou ^ Début et \ z ou $ à la fin. Ensuite, vous pouvez supprimer les limites de mots requises: \ b .

(N'oubliez pas de doubler \ à l'intérieur de la chaîne)


0 commentaires