验证表单http://www.test.com中的URL

Kut*_*PHP 1 javascript regex validation url

我想验证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;
} 
Run Code Online (Sandbox Code Playgroud)

这有什么不对?:(

提前致谢.

Mar*_*aio 5

如果你想部分地坚持你的代码,快速修复可以简单地使用这些:

"^((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"的域.

无论如何,你的代码(以及我上面放置的调整后的代码)都是错误的,因为它们都会验证这些ok域:

你的正则表达式也会接受这样的废话:

  • 欢呼:// WWW ...

验证域部分(强制输入www),您可以使用:

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

这个不会验证好的垃圾,如:

顺便说一句:它也会验证http://www.domain.com.com,但这不是错误,因为子域名网址可能是:http://www.subdomain.domain.com,它是有效的!并且几乎没有办法(或者至少没有操作简单的方法)使用正则表达式验证正确的域tld,因为你必须在内核中写入所有可能的域tlds ONE by ONE,如下所示:

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

(例如,最后一个将仅验证以.com/.net/.de/.it/.co.uk结尾的域) 新的tld 总是出来,所以你必须调整你的regex everytimne一个新的tld出来,那很奇怪!


为了验证url的剩余部分,您可以在正则表达式的末尾添加remainingig部分:

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

它仍然不完美,因为somone可以进入:

http://www.domain.com/????hello

它会验证好,但现在我累了,对不起!:)