3 votes

Empêcher les caractères spéciaux dans une TextBox

Je veux empêcher les utilisateurs d'entrer des URL (comme un href="") dans un champ de texte.

Je veux utiliser un validateur d'expressions régulières mais je ne sais pas quoi écrire ?

Comment puis-je le faire ?

3voto

Joel Coehoorn Points 190579

Javascript + regex le fera, mais il n'y a pas de méthode de code standard que je puisse vous indiquer.

La chose importante à retenir, cependant, est que quoi que vous fassiez, vous ne pouvez pas empêcher les utilisateurs de soumettre une requête à votre serveur avec les mauvais éléments. Cela signifie que tout ce que vous faites sur le navigateur Web du client avec le javascript n'est qu'un pansement et est là pour aider vos utilisateurs à savoir où se trouvent les lignes. Ce n'est pas le véritable code de sécurité. Le véritable code de sécurité doit être sur votre serveur. C'est là que vous devez savoir comment traiter des choses comme les adresses web saisies dans une zone de texte.

3voto

Rex M Points 80372

Voulez-vous dire que vous voulez littéralement les empêcher d'entrer le texte href=" dans la TextBox, ou vous voulez empêcher les URLs ? Quoi qu'il en soit, un RegexValidator est une solution :

En fait, pour autant que je sache, il n'y a pas de moyen très simple d'utiliser un validateur OOTB-regex pour faire un contenu négatif (c'est-à-dire "fail if any match"). Quelqu'un de plus intelligent pourra peut-être me corriger sur ce point. Mais vous pouvez certainement utiliser un validateur personnalisé :

<asp:TextBox runat="server" id="myTextBox" />
<asp:CustomValidator runat="server" OnServerValidate="ValidateNoUrls" ControlToValidate="myTextBox" ErrorMessage="URLs not allowed" />

Codebehind :

protected void ValidateNoUrls(object sender, ServerValidateEventArgs e)
{
    e.IsValid = !Regex.IsMatch(e.Value, @"(ht|f)tp(s?)\:\/\/[0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*(:(0-9)*)*(\/?)([a-zA-Z0-9\-\.\?\,\'\/\\\+&amp;%\$#_]*)?");
}

1voto

Lazarus Points 17526

Comme vous mentionnez ASP.NET, vous pourriez essayer un validateur Regex qui vérifie l'entrée pour s'assurer qu'aucun modèle d'URL n'est présent. Jetez un coup d'œil à ceci Article de MSDN .

Cette regex devrait faire l'affaire : @"^(?!.*(mailto\:|(news|(ht|f)tp(s?))\://).*).*$"

0voto

Hidayath Points 179

Vous pouvez utiliser l'événement JS keypress et vérifier si le motif saisi correspond à ce que vous voulez filtrer. Vous pouvez également utiliser l'événement onblur pour faire la même chose.

0voto

StuartLC Points 35534

Dans tous les cas, vous devriez envisager de procéder à une validation (ou à une suppression) sur le serveur, car un utilisateur malveillant peut effectuer un POST HTTP direct et contourner votre javascript.

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