2009-06-16 6 views

Répondre

3

Regex comme un champion.

Vous pouvez écrire vous-même, voici un exemple rapide:

(https?://)?.+$ 

Un peu googler m'a trouvé quelque chose d'un peu plus particulier, en termes de manière plus stricte validation:

^(https?://)?(([0-9a-z_!'().&=$%-]:)?[0-9a-z_!'().&=$%-]@)?(([0-9]{1,3}\.){3}[0-9]{1,3}|([0-9a-z_!'()-]\.)([0-9a-z][0-9a-z-]{0,61})?[0-9a-z]\.[a-z]{2,6})(:[0-9]{1,4})?((/?)|(/[0-9a-z_!*'().;?:@&=$,%#-])/?)$ 

Source: http://www.geekzilla.co.uk/view2D3B0109-C1B2-4B4E-BFFD-E8088CBC85FD.htm (Évidemment, testez la regex copiée et collée, comme vous le feriez avec n'importe quel code copié)

Si vous ne connaissez pas ho w utiliser des expressions rationnelles en PHP, il est aussi simple que:

$valid = preg_match($pattern, $urlOrStringToValidate); 

où $ pattern = "/(https?://)?.+/" ou quelque chose comme ça, entre/et/

Javascript a une méthode d'objet appelée match sur le type String.

var urlString = "http://www.XYZ.com"; 
var isValidURL = urlString.match(/(https?:\/\/)?.+/); 
+0

Une autre chose que j'ai oublié de mentionner, les expressions rationnelles va juste valider la bonne forme des urls. Vous pouvez voir si ces URL sont valides en faisant des choses comme envoyer une requête AJAX à l'url (Jquery: $ .ajax ({url: urlToTest, erreur: function() {alert ("URL non valide");}}) De même, vous pouvez soit boucler soit faire un gethostbyname (http://us2.php.net/manual/fr/function.gethostbyname.php) pour tester MAIS mon expérience de test de la validité réelle d'une URL a Dites un serveur prend trop de temps pour répondre à l'ajax échoue, ou le nom d'hôte est une adresse IP ... vraiment une douleur à gérer – Ben

+0

la condition ci-dessus va valider à la fois ci-dessous condition? www.xyz.com et http://www.xyz.com – Avinash

+0

http://squarefree.com/shell/shell.html – Alsciende

3

Vous feriez mieux d'utiliser une expression régulière pour cela. Quelque chose comme ceci:

^((ht|f)tp(s?)\:\/\/|~/|/)?([\w]+:\[email protected])?([a-zA-Z]{1}([\w\-]+\.)+([\w]{2,5}))(:[\d]{1,5})?((/?\w+/)+|/?)(\w+\.[\w]{3,4})?((\?\w+=\w+)?(&\w+=\w+)*)? 

Vous pouvez utiliser des expressions régulières en PHP utilisant la fonction preg_match et JavaScript en utilisant la fonction match().

E.g (Javascript).

function validateUrl(url) 
{ 
    var pattern = '^((ht|f)tp(s?)\:\/\/|~/|/)?([\w]+:\[email protected])?([a-zA-Z]{1}([\w\-]+\.)+([\w]{2,5}))(:[\d]{1,5})?((/?\w+/)+|/?)(\w+\.[\w]{3,4})?((\?\w+=\w+)?(&\w+=\w+)*)?'; 

    if(url.match(pattern)) 
    { 
     return true; 
    } 
    else 
    { 
     return false; 
    } 
} 
+0

la condition ci-dessus sera validée pour les deux être état bas? www.xyz.com et http://www.xyz.com – Avinash

+0

Je le crois bien. Je n'ai pas testé correctement l'expression. Vous avez juste besoin de Google autour pour celui qui convient à vos besoins et appliquer cela. Soit cela, ou écrire votre propre expression qui correspond exactement à vos besoins. –