2009-06-16 112 views

回答

3

正则表达式像一个冠军。

你可以自己写一个,这里有一个简单的例子:

(https?://)?.+$ 

一个小Googling发现我的东西多一点具体的,在更严格的验证方式:

^(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_!*'().;?:@&=$,%#-])/?)$ 

来源:http://www.geekzilla.co.uk/view2D3B0109-C1B2-4B4E-BFFD-E8088CBC85FD.htm (显然测试复制和粘贴的正则表达式,就像你使用任何复制粘贴代码一样)

如果你不知道ho W¯¯在PHP中使用正则表达式,它是那样简单:

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

其中$模式= “/(https?://)?.+/” 或类似的东西,之间/和/

Javascript在String类型上有一个名为match的对象方法。

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

我忘了提及的另一件事,正则表达式只会验证URL的格式良好。您可以通过执行诸如向url发送AJAX请求等方式实际查看这些url是否有效。(Jquery:$ .ajax({url:urlToTest,error:function(){alert(“not valid url”);}}) ; 同样,你可以卷曲或做一个gethostbyname(http://us2.php.net/manual/en/function.gethostbyname.php)来测试 但是,我的经验测试一个url的实际有效性说服务器花了很长时间回应,所以ajax失败了,或者主机名是一个ip地址......真的很痛苦, – Ben 2009-06-16 09:32:34

+0

以上条件将验证以下两个条件吗?www.xyz.com和 http://www.xyz.com – Avinash 2009-06-16 09:47:06

3

你最好使用正则表达式来做到这一点。事情是这样的:

^((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+)*)? 

可以使用preg_match功能和JavaScript中使用match()函数使用正则表达式在PHP。

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; 
    } 
}