2012-11-18 20 views
0

我一直在使用這個正則表達式來驗證域名,它確實很好。我需要添加一個http://www.https://www.它。恐怕我會搞砸了。它目前不使用http://www.添加http:// www。到這個正則表達式和禁止子域名

此外,有沒有辦法彎曲這個,所以它會拒絕子域?

因此,在所有這將是:

http://www.domain.com -> valid 
www.domain.com - > Invalid (Should have the http://www. part) 
http://sub.domain.com - > Invalid (Subdomain) 
http://www.sub.domain.com -> Invlaid (Subdomain) 

我試圖與http://www.部分做的事情,但將以錯誤結束。我很無知如何做子域拒絕部分。

function isurl($this_url) 
    { 
      if(preg_match("/^([a-z0-9]([-a-z0-9]*[a-z0-9])?\.)+((a[cdefgilmnoqrstuwxz]|aero|arpa)|(b[abdefghijmnorstvwyz]|biz)|(c[acdfghiklmnorsuvxyz]|cat|com|coop)|d[ejkmoz]|(e[ceghrstu]|edu)|f[ijkmor]|(g[abdefghilmnpqrstuwy]|gov)|h[kmnrtu]|(i[delmnoqrst]|info|int)|(j[emop]|jobs)|k[eghimnprwyz]|l[abcikrstuvy]|(m[acdghklmnopqrstuvwxyz]|mil|mobi|museum)|(n[acefgilopruz]|name|net)|(om|org)|(p[aefghklmnrstwy]|pro)|qa|r[eouw]|s[abcdeghijklmnortvyz]|(t[cdfghjklmnoprtvwz]|travel)|u[agkmsyz]|v[aceginu]|w[fs]|y[etu]|z[amw])$/i", $this_url)) 
       { 
       return true; 
       } 

    } 

    $this_url = "www.domain.com"; 

    if (isurl($this_url)) 
    {echo "Success";} 
    else 
    {echo "Fail";} 

回答

1

試試這個htaccess的

RewriteCond %{HTTP_HOST} !^(www\.)?mysite\.tld$ [NC] 
RewriteRule^- [F,L] 

RewriteCond %{HTTP_HOST} !^www\. [NC] 
RewriteRule^http://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301] 

或使用至REGx

/^(http?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$/ 

爲perticular

/^http?://([a-z0-9-]+\.)*blah\.com(/.*)?$/ 
+0

我需要這個表單驗證腳本。不能使用htaccess來做到這一點。 – Norman

+0

@Norman比嘗試第二個regx –

+0

@NullPointer注意這也會支持'htt://'(正如你在'http'中的'p'上使用'?' – h2ooooooo

0

這應該爲你工作:

<?php 
    function isurl($this_url) { 
     return (filter_var($this_url, FILTER_VALIDATE_URL) && preg_match("#^https?://www\.#", $this_url)); 
    } 
?> 

使用filter_var和一個簡單的正則表達式。

+0

好的,我會解釋它的。必須是一個正則表達式。 – Norman