none
MVC : expression régulière RRS feed

  • Question

  • Bonjour tout le monde,

    J'ai un site MVC Entity Framework Code First, au sujet duquel je me pose une question : qu'est-ce qu'il me veut ?

    Message de non respect d'expression régulière

    Bien sûr pour pouvoir répondre il faut le Code First :

            [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:d}")]
            [Range(typeof(DateTime), "1713/1/1", "9999/12/31")]
            [Display(Name="Date of Release")]
            [RegularExpression("[0-9]{2}/[0-9]{2}/[0-9]{4}")]
            public Nullable<DateTime> ReleaseDate { get; set; }

    Dans une première version il y avait des parenthèses autour de [0-9] et ça faisait pareil, à part que les parenthèses se trouvaient dans le format affiché.

    Si je regarde bien j'ai deux chiffres, suivis d'une barre oblique, de nouveau la même chose, et pour finir quatre chiffres. C'est pour ça que je ne comprends pas ce qui cloche.

    Le contrôle d'intervalle de dates a été codé dans un fichier Extend.js déclaré à la fin du BODY du _layout.cshtml, et ça fonctionne bien. Tant que je ne mets pas une date dans le bon intervalle c'est bloqué côté client, une fois que je mets la valeur illustrée ci-dessus, c'est le serveur qui affiche ce message. J'ai bien vérifié que c'était des zéros et pas des lettres O que j'ai tapé.

    Est-ce le bon forum ?



    • Modifié Gloops vendredi 3 juillet 2015 15:22
    vendredi 3 juillet 2015 15:09

Réponses

  • Bonjour,

    La première chose: les expressions régulières .Net sont basées sur le même langage d'expression que JS (a quelques exceptions). {x} fonctionne parfaitement je l'utilise à longueur de journée actuellement.

    En second: l'attribut RegularExpressionAttribute() ne concerne pas la définition de votre base de données, uniquement la validation des données par MVC (ou tout autre Framework qui utilise cet attribut), par conséquent il n'a aucun impact sur EF. Si vous modifiez RequiredAttribute() ou StringLengthAttribute() vous devrez en effet appliquer une migration car ces attributs concernent aussi bien la validation que la définition de la base de données.

    Pour finir je ne rencontre aucun problème avec votre expression régulière (j'en ai un avec l'attribut RangeAttribute() que j'ai désactivé pour les tests). Alors je ne sais pas si vous avez un problème de rafraîchissement de votre application, mais je ne vois pas pourquoi votre validation ne fonctionne pas chez vous.

    Cordialement,


    Yan Grenier

    Merci de bien vouloir "Marquer comme réponse", les réponses qui ont répondues à votre question, et de noter les réponses que vous avez trouvé utiles.

    lundi 6 juillet 2015 07:38

Toutes les réponses

  • Bonjour,

    Après quelques tests supplémentaires il y a trois choses à dire :

    • Sur mon expression régulière il y a à redire concernant les quantificateurs : {2} passe très bien en Javascript si je ne m'abuse, mais en Csharp l'équivalent est {2,2} ; il est obligatoire d'avoir au moins la virgule, l'absence de nombre avant ou après signifie qu'on n'a qu'une borne à l'intervalle
    • Même en corrigeant l'expression régulière à la lumière de la remarque précédente, ça ne passe pas dans un site MVC : "[0-9]{2,2}/[0-9]{2,2}/[0-9]{4,4}"
    • L'utilisation de l'expression régulière a été proposée à titre cursif par les "coaches" MVC, toutefois il n'est pas certain que dans ce cas précis ça ajoute vraiment quelque chose fonctionnellement, puisque l'essentiel est d'avoir une date.

    Toutefois il n'est pas exclu d'avoir un jour à respecter une expression régulière dans un site MVC, donc si quelqu'un peut répondre au deuxième point ...

    J'ajouterais bien une question pratique, concernant spécifiquement MVC. Il me semble bien avoir le souvenir qu'une modification dans la description d'un champ impose la validation des migrations, faute de quoi on se retrouve avec un message d'erreur informant que la base ne peut pas être créée car elle existe déjà. Là non, l'expression régulière a été corrigée sans problème à la compilation suivante, et j'ai retrouvé l'enregistrement en cours de création, dans la fenêtre que j'avais laissée ouverte à cet effet. Faut-il comprendre que la base n'est considérée comme créée qu'après création valide d'un enregistrement ?


    • Modifié Gloops samedi 4 juillet 2015 14:06
    samedi 4 juillet 2015 13:54
  • Bonjour,

    La première chose: les expressions régulières .Net sont basées sur le même langage d'expression que JS (a quelques exceptions). {x} fonctionne parfaitement je l'utilise à longueur de journée actuellement.

    En second: l'attribut RegularExpressionAttribute() ne concerne pas la définition de votre base de données, uniquement la validation des données par MVC (ou tout autre Framework qui utilise cet attribut), par conséquent il n'a aucun impact sur EF. Si vous modifiez RequiredAttribute() ou StringLengthAttribute() vous devrez en effet appliquer une migration car ces attributs concernent aussi bien la validation que la définition de la base de données.

    Pour finir je ne rencontre aucun problème avec votre expression régulière (j'en ai un avec l'attribut RangeAttribute() que j'ai désactivé pour les tests). Alors je ne sais pas si vous avez un problème de rafraîchissement de votre application, mais je ne vois pas pourquoi votre validation ne fonctionne pas chez vous.

    Cordialement,


    Yan Grenier

    Merci de bien vouloir "Marquer comme réponse", les réponses qui ont répondues à votre question, et de noter les réponses que vous avez trouvé utiles.

    lundi 6 juillet 2015 07:38
  • Bonjour,

    Donc ... OK j'ai une date, ça ça marche, toutefois si on considère ça comme réponse valable ça veut dire qu'on renonce à trouver une expression régulière valide avec deux chiffres, une barre oblique, de nouveau la même chose, et pour finir quatre chiffres ?

    lundi 27 juillet 2015 19:48