2009-09-14 10 views

risposta

2

Fare un test RegExp di base per formattazione. Quindi esegui il ping dell'URL utilizzando un XMLHttpRequest per assicurarti che esista. Un esempio utilizzando 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

suppongo, che si sa come ottenere il valore di <input> con JavaScript. Quindi il tuo problema è scrivere la funzione specifica per la convalida dell'URL.

In primo luogo potremmo considerare verificando che l'URL sia sintatticamente corretto.

Alcuni esempi, che il nostro validatore URL deve assolutamente prendere in considerazione 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 

E questo è solo una piccola frazione del reale varietà di URL-s possibile. E HTTP e FTP non sono gli unici protocolli possibili per l'URL. Oh uomo, quella validazione dell'URL è davvero difficile.

Ma supponiamo che un URL valido debba iniziare con alcune lettere, quindi ": //" e dopo quello che mai. Per verificare che tipo di modello si può usare un'espressione regolare che in JavaScript assomiglia a questo:

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

espressioni regolari sono un intero argomento grande, che si dovrebbe prendere in considerazione l'apprendimento da soli, ma solo una breve spiegazione qui:

  • / - inizio di espressione regolare
  • ^ - corrisponde l'inizio della stringa
  • [a-z] - corrisponde sia a, b, c, ..., x, y, z.
  • + - significa che il modello precedente può essere ripetuto una o più volte.
  • : - corrisponde al simbolo del colon stesso.
  • \/ - corrisponde alla barra di avanzamento / (senza il backslash JavaScript potrebbe pensare che sia la fine dell'espressione regolare).
  • / - termina l'espressione regolare.
  • i - questo è un modificatore, che rende questa espressione regolare senza distinzione tra maiuscole e minuscole.
  • .test(url) - chiama il parametro test di oggetto espressione regolare con url come parametro. Quando parametro corrisponde all'espressione regolare, restituisce true altrimenti false.

Inoltre si potrebbe desiderare di consentire l'inserimento di un URL senza la parte http:// - questo significa che si ha realmente bisogno di convalidare il nome di dominio o l'indirizzo IP o qualsiasi altra cosa che lo segue.

Immagino che ora sei abbastanza confuso, e questo è intenzionale. Non dovresti davvero scrivere JavaScript per fare la convalida degli URL da solo, è troppo difficile farlo bene.Invece dovresti usare una funzione di libreria, che è stata testata e confermata corretta da molti esperti.

Forse il fraimwork JavaScript che stai utilizzando ha già un buon strumento per quel lavoro. In tal caso, usalo. Purtroppo non posso suggerire alcuna libreria specifica per la convalida degli URL in modo specifico.

Inoltre, è possibile prendere in considerazione l'ping dell'URL come suggerito da Josh Stodola, per verificare che esista realmente. Sebbene, il modo specifico suggerito da Josh, potrebbe essere problematico nel caso in cui la risorsa referenziata dall'URL sia il file 10GB :)

-1

Controlla lo Regular Expression Library, che dispone di un ampio repository di espressioni regolari per tutti i tipi di convalida. Offrono anche uno strumento di test online.

Problemi correlati