2010-11-11 5 views
0

J'ai une application asp.net, dans laquelle j'ai une zone de texte pour l'URL. Et j'utilise l'expression régulière pour valider. Mon expression régulière est comme ceci: ^(ht|f)tp(s?)\:\/\/[0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*(:(0-9)*)*(\/?)([a-zA-Z0-9\-\.\?\,\'\/\\\+&%\$#_]*)?$Expression régulière Modification

Mais maintenant j'ai une amélioration comme le texte garde toujours le texte de http: //. à ce moment la validation de cette expression doit ignorer le texte par défaut (http: //). Comment il est possible? Aidez-moi s'il vous plaît en résolvant ce problème.

Répondre

1

Votre expression correspond à la partie http://, de sorte qu'elle "conserve" cette partie de la correspondance. Si la zone de texte que vous validez ne contient absolument pas cette partie, déposez simplement (ht|f)tp(s?)\:\/\/ depuis votre regex.

Si elle fait partie de la zone de texte, mais que vous voulez l'ignorer après l'avoir mise en correspondance, vous pouvez placer la parenthèse de capture autour de la correspondance voulue. Votre regex d'origine doit ressembler à ceci:

^(ht|f)tp(s?)\:\/\/([0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*(:(0-9)*)*(\/?)([a-zA-Z0-9\-\.\?\,\'\/\\\+&%\$#_]*)?)$ 

Maintenant la partie sans http:// ou ftp:// etc seront en nombre de backreference 3.

Cela dit, votre regex tel qu'il est maintenant est assez mauvais et aussi incorrect (Beaucoup d'évasions inutiles, parenthèses inutiles, classes de caractères mal construites (URL avec numéro de port échouera ici), et je suis sûr que vous ne voulez pas & là-bas) ...

Ce n'est pas facile pour valider les URL avec des regex. Quelles sont vos intentions? Qu'est-ce qui devrait être valide, ce qui ne devrait pas être?

+0

je veux l'expression de validation de la partie arrière de http: //. Parce que le texte http // est toujours affiché. – MAC

+0

Vous voulez dire qu'il est en dehors de la zone de texte? Eh bien, laissez tomber cette partie de l'expression régulière comme indiqué dans la première phrase de ma réponse. –

0

Vous pouvez essayer -

Utilisez ((ht|f)tp(s?)\:\/\/)? dans le démarrage de votre expression régulière qui rend http: // ou ftp: // en option.

Votre complète regex serait -

^((ht|f)tp(s?)\:\/\/)?[0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*(:(0-9)*)*(\/?)([a-zA-Z0-9\-\.\?\,\'\/\\\+&%\$#_]*)?$ 
+0

Mais si elle est là, elle sera toujours associée et donc pas ignorée car Dilse Naaz l'attend. –

+0

@Tim - J'ai compris la question comme correspondant aux URLs qui n'ont pas http: // etc Vous pouvez avoir raison, dans ce cas, je pense que nous devons supprimer '^ ((ht | f) tp (s?) \: \/\ /)? 'de l'expression régulière. Mais comme vous l'avez mentionné, il sera encore incorrect, car il y a beaucoup d'autres évasions inutiles –

+0

Aussi, je ne sais pas pourquoi OP doit ignorer http: // de regex match. Si c'est toujours disponible et si la regex actuelle fonctionne, pourquoi supprimer ou ignorer le http: // etc de regex. Je ne pense pas qu'il existe des problèmes de performance sur ce droit? –