2010-12-10 6 views
0

J'ai une zone de texte et les utilisateurs saisissent na plutôt que de fournir les données spécifiées. Comment peut-on explicitement ne pas leur permettre d'entrer na sur le terrain? Je veux utiliser un regularexpressionvalidator asp.Expression régulière ne permettant pas aux utilisateurs d'entrer NA ou N/A ou na ou n/a

+2

Si le champ a un format spécifique (numéros de téléphone, dates), vérifiez que l'entrée correspond à ce format. Sinon, rejeter N/A les amènera à entrer dans une autre poubelle. Aucun regex ne fera que les gens vous donnent des informations qu'ils ne veulent pas donner. –

Répondre

3

Pourquoi utiliser regex pour résoudre ce problème lorsque vous pouvez le résoudre avec une simple instruction if?

if (input.ToLower().Trim() != "na" && input.ToLower().Trim() != "n/a") 
{ 
    // Continue processing 
} 
+0

Option valide mais la regex est la solution choisie car elle utilise regularexpressionvalidator dans ASP.NET. Ce n'est vraiment pas la réponse à la question –

1

Ryan fait un bon point - mais si vous êtes mort situé sur l'utilisation regex, cela devrait faire l'affaire (assurez-vous marquer comme insensible à la casse):

^n\/?a$

+0

Cela correspond également maïs/anonyme –

+0

Droit, whoops - merci pour le heads-up. J'ai ajouté des marqueurs de début/fin au motif. – girasquid

4
^(?!\s*n\s*/?\s*a\s*$).* 

va correspondre (et retourner la chaîne d'entrée) si l'utilisateur entre quoi que ce soit sauf n/a et échouera autrement. Toutes les variations de vos questions sont couvertes si vous sélectionnez la correspondance insensible à la casse (dans .NET, ceci est fait en utilisant l'option RegexOptions.IgnoreCase). En outre, toute quantité d'espace sera ignorée, de sorte que l'utilisateur ne peut pas simplement taper n/ a.

+0

Problème ici est que cela correspond également maïs/anonyme –

+0

@Ryan Pedersen: Comment est-ce un problème? Il est censé correspondre à tout sauf 'n/a', donc le maïs/anonyme est un match légal. –

+1

AFAIK, RegularExpressionValidator n'accepte pas les arguments RegexOptions comme le font les constructeurs Regex. Vous devrez utiliser le modificateur inline, '(? I)', mais votre validateur ne pourra alors s'exécuter que sur le serveur; JavaScript ne prend pas en charge les modificateurs en ligne. –

1

Insensibilité à la casse peut être basculée par i: jeton, donc le regex résultant peut être comme ça:

(?i:^n\/a$) 

Mise à jour: parenthèses ajouté après le commentaire d'Alan.

+0

ce n'est pas une regex valide pour asp.net. Quand je le mets dans une page web en utilisant RegularExpressionValidator, j'obtiens l'erreur suivante: analyser "? I:^n \/a $" - Quantifier {x, y} après rien. –

+1

La syntaxe correcte pour les modificateurs en ligne est '(? I:^n/a $)' ou '(? I)^n/a $', mais voir mon commentaire sur la réponse de Tim à propos de leur utilisation. (De plus, '/' n'a pas de signification particulière dans les regexes, il a seulement besoin d'être échappé s'il est utilisé comme regex * delimiter *, mais ce n'est pas un problème dans .NET.) –

1

Vous ne pouvez pas faire cela avec RegularExpressionValidator, car il se produira une erreur lorsque le motif ne correspond pas. Il n'y a aucun moyen d'inverser le RegularExpressionValidator pour donner une condition d'erreur lorsque le modèle est mis en correspondance.

Vous pouvez utiliser un CustomValidator pour cela et 4 Guys From Rolla wrote an tutorial on how to do this il y a quelque temps ou vous pouvez obtenir des validateurs de 3ème partie comme ceux de Peter Blum.

Avant d'investir beaucoup de temps, vous devriez considérer le commentaire de @bemace. Si vous implémentez cela, vous obtiendrez seulement un nouveau type de "garbage in" au lieu de n/a.

Questions connexes