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)
这有什么不对?:(
提前致谢.
如果你想部分地坚持你的代码,快速修复可以简单地使用这些:
"^((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),您可以使用:
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
它会验证好,但现在我累了,对不起!:)