2010-04-14 3 views
1

Je réalise une validation côté client dans ASP.NET MVC et je me suis retrouvé à essayer de faire une validation conditionnelle sur un ensemble d'éléments (ie, si la case est cochée puis valider et vice versa) . C'était problématique, c'est le moins qu'on puisse dire. Pour contourner cela, j'ai pensé que je pouvais "tricher" en ayant un élément caché qui contiendrait toutes les informations pour chaque ensemble, donc l'idée d'une chaîne CSV contenant cette information. J'utilise déjà un attribut [HiddenRequired] personnalisé pour valider si l'entrée cachée contient une valeur, mais j'ai pensé que je devrais valider chaque donnée dans le fichier csv, qu'une expression régulière résoudrait cela.Test d'expression régulière conditionnelle d'un fichier CSV

Mon travail d'expression régulière est extrêmement faible et après 2 bonnes heures j'ai presque abandonné.

Voici un exemple de la chaîne csv:

vrai, 3,24, plus, 0,5

pour expliquer:

  • vrai indique si je dois valider la du repos. J'ai besoin de passer conditionnellement dans la regex en utilisant ce
  • 3 et 24 sont des entiers et ne tomberont jamais dans la gamme 0-24.
  • over est une chaîne et sera soit over soit under
  • 0.5 est une valeur décimale, de précision inconnue.

Dans la validation, toutes les valeurs doivent être présentes et au moins du type correct

Y at-il quelqu'un qui peut soit fournir un tel regex ou au moins donner quelques conseils, je suis vraiment coincé!

Répondre

2

Essayez cette regex:

@"^(true,([01]?\d|2[0-4]),([01]?\d|2[0-4]),(over|under),\d+\.?\d+|false.*)$" 

Je vais essayer de l'expliquer à l'aide de commentaires. N'hésitez pas à demander si quelque chose n'est pas clair. =)

@" 
^   # start of line 
    (
    true,    # literal true 
    ([01]?\d    # Either 0, 1, or nothing followed by a digit 
     |     # or 
    2[0-4]),    # 20 - 24 
    ([01]?\d|2[0-4]),  # again 
    (over|under),   # over or under 
    \d+\.?\d+    # any number of digits, optional dot, any number of digits 

    |   #... OR ... 

    false.*    # false followed by anything 
    ) 
    $   # end of line 
"); 
+0

Fantastique, fonctionne comme un charme! –

1

Je probablement utiliser un Split(',') et de valider les éléments du tableau résultant au lieu d'utiliser une expression régulière. Aussi, vous devriez faire attention à l'affaire \, (la virgule fait partie de la valeur).

+0

J'utilise l'attribut DataAnnotations RegularExpression, ce qui malheureusement ne le permet pas. –

Questions connexes