2011-01-08 2 views
-1

J'utilise cette fonction PHP pour valider une URL.Modèle REGEX pour la validation d'URL

$url = preg_replace("/[^A-Za-z0-9-\/\.\:]/", "", trim($url)); 
$url = preg_replace('%^(?!https?://www\.).*%', 'http://www\.$0', $url); 

Mais, ce n'est pas parfait pour moi. Je veux ce contrôle:

1 - Est-il commencer par http: // ou https: //? Sinon, ajoutez http (ou https)

2 - Si elle n'a pas et sous-domaine si elle n'a pas www, ajouter. Mais s'il a sous-domaine, ne pas ajouter www.

Exemples:

example.com 
CONVERT -> http://www.example.com 

www.example.com 
CONVERT -> http://www.example.com 

subdomain.example.com 
CONVERT -> http://subdomain.example.com 

http://subdomain.example.com 
CONVERT -> http://subdomain.example.com 

, je dois donc améliorer mon modèle REGEX. Mais je ne peux pas. Comment puis-je l'utiliser?

+0

La première regex supprimera trop de charactes valides de n'importe quel chemin d'URL existant et échouera sur tout nouveau http: // [:: 1]/~ user/a + b? X = 1 # 2. – mario

+0

duplication possible de [problème regex avec url] (http://stackoverflow.com/questions/2987263/regex-problem-with-url) –

Répondre

0

Supprime le www\. de la deuxième regex. Cela le ferait travailler sur les exemples de sous-domaines.

Si vous voulez le rendre plus intelligent, utilisez un if et un second regex pour vérifier ^(\w+://)?\w+\.\w+$ avant de le préfixer avec http: // ou un extra www.

+0

Comment puis-je utiliser 2ème regex avec PHP? – Eray

+0

utilise 'preg_match' – mario

+0

preg_match ("^(\ w +: //)? \ W + \. \ W + $ ", $ url)? – Eray