簡體   English   中英

以http://www.test.com形式驗證URL

[英]validate URL in form http://www.test.com

我想驗證URL(使用Java腳本)以僅接受格式-http: //www.test.com 我正在嘗試遵循以下代碼,但它也接受test.com和http://www.test.com.com

var URLReg = new RegExp();
URLReg.compile("^[A-Za-z]+://[A-Za-z0-9-_]+\\.[A-Za-z0-9-_%&\?\/.=]+$");
if (!URLReg.test(form["URL"].value)) {
    alert("You must supply a valid URL.");
    return false;
} 

這有什么問題? :(

提前致謝。

如果您想部分堅持自己的代碼,可以使用以下方法快速解決:

"^((https?\\\\://www\\\\.)|(www\\\\.))[A-Za-z0-9_\\\\-]+\\\\.[A-Za-z0-9_\\\\-\\\\%\\\\&\\\\?\\\\.\\\\=\\\\+]+$" (接受“ http:// www ....”和“ www ...”)

要么

"^(https?\\\\://www\\\\.)[A-Za-z0-9_\\\\-]+\\\\.[A-Za-z0-9_\\\\-\\\\%\\\\&\\\\?\\\\.\\\\=\\\\+]+$" (僅接受“ http:// www ....”,不接受“ www ...”)

以上兩個都不接受沒有“ www”的域名。

無論如何,您的代碼(以及我在上面放置的調整后的代碼)都是錯誤的,因為它們都將驗證如下所示的正常域:

您的正則表達式也將接受以下廢話:

  • 干杯// www ...

驗證域部分強制輸入www ),可以使用以下命令:

var URLReg = /^((https?\://wwww\.)|(www\.))([a-z0-9]([a-z0-9]|(\-[a-z0-9]))*\.)+[a-z]+$/i;

這不會驗證像這樣的廢話:

順便說一句:它也可以驗證http://www.domain.com.com,但這不是錯誤,因為子域url可能類似於: http : //www.subdomain.domain.com ,它是有效的! 而且幾乎沒有方法(或至少沒有操作上簡便的方法)使用正則表達式來驗證正確的域tld ,因為您必須將所有可能的域 tld逐一 內聯寫入正則表達式中,如下所示:

var URLReg = /^((https?\://wwww\.)|(www\.))([a-z0-9]([a-z0-9]|(\-[a-z0-9]))*\.)+(com|it|net|uk|de)$/i;

(例如,最后一個僅驗證以.com / .net / .de / .it / .co.uk結尾的域)新tld 總是會出現 ,因此您必須對正則表達式進行調整,以使新tld出現,真奇怪!


為了也驗證URL的其余部分,您可以在regex的末尾添加restig部分:

var URLReg = /^((https?\\://wwww\\.)|(www\\.))([a-z0-9]([a-z0-9]|(\\-[a-z0-9]))*\\.)+[az]+(\\/[a-z0-9_\\-\\%\\&\\?\\.\\=\\+]*)*$/i ;

它仍然不是完美的,因為有人可能進入:

http://www.domain.com/?

可以驗證,但是現在我很累,對不起! :)

我使用此表達-我發現的最好的表達:

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

看看

^[A-Za-z]+:\/\/[A-Za-z0-9-/]+\.com$

是你想要的

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM