10
votes

.NET Regex spécifique à .NET C # Dataannotations

J'ai une expression régulière que j'essaie de comprendre un modèle de validation d'annotation de données .NET que j'utilise. Actuellement, il ressemble à ce xxx

La première moitié de cette regex est de rendre compte de la ville, la seconde moitié consiste à s'assurer que ses seules lettres et espaces.

La valeur par défaut de la zone de texte d'entrée est la ville, alors "ville" ne peut pas passer la validation. Je ne peux pas sembler obtenir la première section de cette regex pour que ces cas passent ces cas. xxx

mais ce cas ne passe pas: xxx

Toute aide serait grandement appréciée.

* modifier * Celui-ci a fait l'astuce:

^ ((((((?! ^ City $) [A-Za-Z ']) + $

J'ai mis à jour toute ma validation pour inclure ceci. Juste au cas où vous voudriez voir ce que je fais. Ici si le code de l'ensemble du modèle de données de validation que j'utilise. (mis à jour avec la regex correcte) xxx


0 commentaires

5 Réponses :


1
votes

C'est en fait une très petite erreur de votre part. Changez votre regex à: xxx

et vous aurez l'effet souhaité. Fondamentalement, le + signifie un ou plusieurs fois, et puisque vous avez eu toute l'expression enfermée entre parenthèses qui se produiraient une ou plusieurs fois, il trouverait la correspondance de la "ville" à tout moment de la chaîne ... cela dit à la place, dans Anglais: pas "ville", et des lettres et des espaces ou des citations simples une ou plusieurs fois.

Un bon outil pour tester Regex est regex héros: http://regexhero.net/tester


1 commentaires

Cela ne correspond pas à City City . Vous avez besoin d'un $ dans le look à venir pour vous assurer qu'il n'y ait rien après la ville.



1
votes

(?! ville) signifie City Zero Largeur Lookahead, donc, ^ (((?! City) [A-ZA-Z ']) + $ signifie:

  • ne contient que des espaces de lettres et '
  • ne contient pas ville

    Voici comment interdire Ville : xxx

    démo


0 commentaires

4
votes

Essayez ceci pour l'expression régulière - ^ ((((?! ^ City $) [A-ZA-Z ']) + $
Pour faire une vérification négative de "ville", j'ai ajouté des caractères de départ (^) et de fin ($) à la ville. Je l'ai testé à http://regex101.com/r/bf4bz3 et il semble fonctionner si je Je comprends bien l'exigence correctement.


0 commentaires

1
votes

La correspondance négative des expressions régulières est généralement une mauvaise idée, elle n'est tout simplement pas conçue de cette façon. La meilleure méthode serait de vérifier: xxx pré>

et nier le test. Dans ce cas, vous n'avez pas vraiment d'option pour le faire. P>

Vous êtes vraiment proche, il vous suffit de déplacer vos ancres dans la lunette de regard négatif et de donner à la chaîne une longueur min. P >

(?!^City$)[-a-zA-Z ]{3,}(?<!^City$)


0 commentaires

2
votes

D'autres réponses vous ont donné l'aide avec l'expression régulière que vous avez demandée. Je vais commenter sur un aspect légèrement différent - la valeur par défaut devrait être quelque chose de significatif, ou rien du tout ("Ville" est une mauvaise valeur par défaut).

Ce que vous vouliez probablement faire était de mettre du texte de placement, qui disparaît dès que vous entrez dans la zone de texte. Vous pouvez le faire avec le Invite Propriété de Display attribut si vous utilisez NET 4.5 - voir Cette réponse pour plus de détails.

n'utilisant pas une fausse valeur par défaut signifie que vous pouvez simplement utiliser [requis] et les utilisateurs devront entrer quelque chose et empêcheront de garder une trace de vos fausses valeurs par défaut.

Juste pour lancer une autre clé dans les œuvres, "City" est un Nom du lieu valide - Il y a deux villages appelés ville à Galles et une région de Zurich!


1 commentaires

Si je l'avais mon chemin, j'utiliserais simplement des étiquettes pour tout. Malheureusement, Creative aime proposer des formes qui gâchent ma validation de forme. Ce que je ferai finalement, c'est essayer d'utiliser cela comme alternative aux annotations de données .NET. fluentvalidation.CodePlex.com