RegularExpressionAttribute - Comment font-il pas sensible à la casse pour la validation côté client?
J'ai une chaîne de caractères que j'utilise pour la validation côté client:
private const String regex = @"^(?:\b(?:\d{5}(?:\s*-\s*\d{5})?|([A-Z]{2})\d{3}(?:\s*-\s*\d{3})?)(?:,\s*)?)+$";
Je utiliser cette corde à mon [RegularExpression(regex, ErrorMessage = "invalid")]
attribut.
Je sais que le /i
drapeau pour une regex en Javascript est utilisé pour faire de la casse, mais juste en la clouant à la fin de ma regex (c'est à dire @"^....$/i"
n'est pas la regex validation échoue complètement, indépendamment de ce qui est entré (valide ou non).
Ce qui me manque?
- Le problème, c'est que .NET et JS est l'utilisation de différentes saveurs de Regex, donc si nous voulons le même schéma de travail universellement sur le client et le serveur, nous avons à utiliser un sous-ensemble de la syntaxe d'expression régulière qui est sûr en JS et C#. Alternativement, des approches comme Jeremy la solution ci-dessous nous permet d'richement composer et de contrôle des modificateurs dans les deux langues par la ramification de la logique de validation sur le serveur et le client
Vous devez vous connecter pour publier un commentaire.
J'ai créé cet attribut qui permet de spécifier RegexOptions. EDIT: Il s'intègre également avec la discrète de validation. Le client ne peut obéir à RegexOptions.Multiline et RegexOptions.IgnoreCase étant donné que c'est du JavaScript qui prend en charge.
C#
JavaScript
Cet article par Anthony Stevens m'a aidé à obtenir ce travail: ASP.NET MVC 3 Javascript Discret de Validation Avec les Validateurs Personnalisés
/pattern/flag
la syntaxe littérale, mais la valeur est passée en `new RegExp(params)` constructeur de syntaxe qui n'est pas analyser les attributs, donc, l'approche est la bonne pour écrire le côté client drapeau de la manipulation de nous-mêmes ainsiEn C#, vous pouvez inline quelques regex options. Pour spécifier l'option pour ignorer le cas où vous souhaitez ajouter
(?i)
au début de votre modèle. Cependant, je ne suis pas sûr de savoir comment ce serait traitée par leRegularExpressionAttribute
et si elle s'occupe de la traduction pour le côté client. De mon expérience avec ASP.NET'sRegularExpressionValidator
j'en doute; l'expression régulière doit être vanille assez de travail pour les deux moteurs.En tout cas, s'il était valide, il devrait ressembler à ceci: