43 votes

Rendre la casse des expressions régulières insensible à ASP.NET RegularExpressionValidator

Compte tenu de cette expression régulière: "^[0-9]*\s*(lbs|kg|kgs)$" comment puis-je le rendre insensible à la casse? J'essaie de l'utiliser dans un validateur d'expressions régulières .net, j'ai donc besoin de spécifier l'insensibilité à la casse dans le modèle.

Je ne peux pas utiliser les RegexOptions par programme car je spécifie l'expression régulière dans un RegularExpressionValidator

56voto

Jeremy Points 14078

J'ai découvert.

Respecte la casse: ^[0-9]\s(lbs|kg|kgs)$

Insensible à la casse: (?i:^[0-9]\s(lbs|kg|kgs)$)

Je crois que cela est spécifique à l'implémentation .NET des expressions régulières. Donc, si vous l'utilisez dans le RegularExpressionValidator, vous devez désactiver la validation côté client car l'analyseur regex javascript ne reconnaîtra pas le jeton ?i .

25voto

Richard JP Le Guen Points 13306

Utilisez les options RegEx .

 Regex regExInsensitive = new Regex(@"^[0-9]\s(lbs|kg|kgs)$", RegexOptions.IgnoreCase);
 

Dans d'autres langues, vous pouvez généralement spécifier un modificateur RegEx après la fin du Reg Ex; le modificateur «insensible à la casse» est «i»:

En Perl:

 if($var =~ /^[0-9]\s(lbs|kg|kgs)$/i) { # the /i means case insensitive
    # ...
}
 

En PHP:

 if(preg_match("/^[0-9]\s(lbs|kg|kgs)$/i", $var)) {
    // ...
}
 

4voto

goodeye Points 917

Je sais que cela a été répondu il y a longtemps, et c'est la meilleure série de réponses parmi d'autres dupliquer des questions. Voici une alternative à l'aide d'un CustomValidator, quand vraiment besoin de l'insensibilité à la casse côté serveur et côté client; et le Haut/bas [A-Za-z] char approche est de trop.

Cette mélanges divers autres réponses, utilisant le serveur-côté RegEx objet côté client et de la syntaxe javascript.

CustomValidator:

<asp:CustomValidator ID="cvWeight" runat="server" ControlToValidate="txtWeight"
  OnServerValidate="cvWeight_Validate" ClientValidationFunction="cvWeight_Validate"
  ValidateEmptyText="true" Text="*" ErrorMessage="Invalid entry." />

Code derrière:

protected void cvWeight_Validate(object sender, ServerValidateEventArgs args)
{
    Regex re = new Regex(@"^[0-9]*\s*(lbs|kg|kgs)$", RegexOptions.IgnoreCase);
    args.IsValid = re.IsMatch(args.Value);
}

La validation côté Client de la fonction:

function cvWeight_Validate(sender, args) {
  var reWeight = /^[0-9]*\s*(lbs|kg|kgs)$/i;
  args.IsValid = reWeight.test(args);
}

Cela fonctionne bien pour moi, sauf lors de l'utilisation d'un ValidationSummary. Sur la validation côté client, l'erreur * montre, mais je ne peux pas obtenir le message d'erreur à afficher dans le résumé. Le résumé s'affiche uniquement lorsqu'il est soumis. Je pense que c'est censé afficher; j'ai un mix de mise à jour des panneaux et de l'héritage de code, ce qui peut avoir des problèmes.

3voto

Geoff Reedy Points 16508

Le plus simple ici est de simplement modifier l'expression régulière en

 ^[0-9]*\s*([lL][bB][sS]|[kK][gG][sS]?)$
 

C'est horrible à lire, mais ça marchera bien.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X