2009-09-14 7 views

Répondre

2

Faites un test RegExp de base pour formatage. Puis ping l'URL en utilisant un XMLHttpRequest pour s'assurer qu'il existe. Un exemple en utilisant jQuery ...

var url = $("#txtUserWebSite").val(); 
var reg = /^(([\w]+:)?\/\/)?(([\d\w]|%[a-fA-f\d]{2,2})+(:([\d\w]|%[a-fA-f\d]{2,2})+)[email protected])?([\d\w][-\d\w]{0,253}[\d\w]\.)+[\w]{2,4}(:[\d]+)?(\/([,-+_~.\d\w]|%[a-fA-f\d]{2,2})*)*(\?(&?([,-+_~.\d\w]|%[a-fA-f\d]{2,2})=?)*)?(#([,-+_~.\d\w]|%[a-fA-f\d]{2,2})*)?$/; 

if(!reg.test(url)) { 
    alert("Invalid URL!"); 
    return false; 
} 

$.get(url, function(dat, stat) { 
    if(stat == "success") 
    alert("Valid URL!"); 
    else 
    alert("Invalid URL!"); 
}) 
10

Je suppose que vous savez comment obtenir la valeur de <input> avec JavaScript. Votre problème consiste donc à écrire la fonction spécifique pour valider l'URL.

D'abord nous pouvons considérer en vérifiant que l'URL est syntaxiquement correcte.

Quelques exemples, que notre URL validateur devrait certainement considérer OK:

http://www.example.com. 
http://www.google.ee/search?q=foo&sourceid=opera&ie=utf-8&oe=utf-8 
https://ama-z-on.co.uk/index.html?a=hei%20hoo 
ftp://ftp.linux.ee/public/gentoo/i386/portage-snapshot.tar.bz 
http://he.wikipedia.org/wiki/שטרגליים#.D7.A8.D7.90.D7.95_.D7.92.D7.9D 
sftp://123.1.255.128:80/pub 

Et c'est seulement une petite fraction de la vraie variété d'URL est possible. Et HTTP et FTP ne sont pas les seuls protocoles possibles pour l'URL. Oh mec, cette validation d'URL est vraiment difficile.

Mais supposons qu'une URL valide devrait commencer par quelques lettres, puis ": //" et après cela. Pour tester ce genre de modèle que vous souhaitez utiliser une expression régulière qui en JavaScript ressemble à ceci:

function validateUrl(url) { 
    return /^[a-z]+:\/\//i.test(url); 
} 

Les expressions régulières sont un tout grand sujet, que vous devriez envisager d'apprendre par vous-même, mais juste une brève explication ici:

  • / - début d'expression régulière
  • ^ - correspond au début de la chaîne
  • [a-z] - correspond a, b, c, ..., x, y ou z.
  • + - signifie que le motif précédent peut être répété une ou plusieurs fois.
  • : - correspond au symbole du côlon lui-même.
  • \/ - correspond à la barre oblique / (sans la barre oblique inversée JavaScript pourrait penser que c'est la fin de l'expression régulière).
  • / - termine l'expression régulière.
  • i - il s'agit d'un modificateur qui rend cette expression régulière insensible à la casse.
  • .test(url) - appelle la méthode test de l'objet d'expression régulière avec url comme paramètre. Lorsque le paramètre correspond à l'expression régulière, il renvoie true sinon false.

De plus, vous voudrez peut-être pour permettre la saisie d'une URL sans la partie http:// - cela signifie que vous avez vraiment besoin de valider le nom de domaine ou l'adresse IP ou tout autre qui le suit.

Je suppose que vous êtes assez confus maintenant, et c'est intentionnel. Vous ne devriez pas écrire du JavaScript pour faire la validation d'URL par vous-même, c'est trop dur de le faire correctement.Au lieu de cela, utiliser une fonction de bibliothèque, qui a été testée et confirmée comme étant correcte par de nombreux experts. Peut-être que le fraimwork JavaScript que vous utilisez déjà a un bon outil pour ce travail. Dans ce cas, utilisez-le. Malheureusement, je ne peux suggérer aucune bibliothèque spécifique pour la validation d'URL spécifiquement.

En outre, vous pouvez envisager en envoyant un ping à l'URL comme Josh Stodola l'a suggéré, pour vérifier qu'il existe réellement. Bien que, la suggestion particulière de Josh, pourrait être problématique dans le cas où la ressource référencée par l'URL est le dossier de 10GB :)

-1

Vérifiez le Regular Expression Library, qui a un grand référentiel d'expressions régulières pour toutes sortes de validations. Ils fournissent également un outil de test en ligne.

Questions connexes