Mar*_*ine 46 validation url jquery
我需要使用jQuery 验证变量中的url ,但不能使用validate-plugin.有一个简单的方法吗?
Nic*_*ver 130
您可以使用与验证插件相同的正则表达式(在2015年5月23日更新到最新的正则表达式):
function isUrlValid(url) {
return /^(https?|s?ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i.test(url);
}
var testCases = [
"http://www.google.com/",
"https://www.google.com/",
"ftp://www.google.com/",
"http://google.com/",
"http://google.com",
"https://google.com",
"http://www.google.com:80/",
"https://www.google.com:443/",
"http://127.0.0.1/",
"http://127.0.0.1:9200/",
"www.site.com",
"x:",
"http://",
"javascript:alert('xss')",
"http://w",
"http:",
"derp://www.google.com",
"http://localserver"
], div = document.getElementById("output");
for(var i=0; i < testCases.length; i++) {
var test = testCases[i];
div.innerHTML += (isUrlValid(test) ? "<span class='valid'>valid</span>: " : "<span class='invalid'>invalid</span>: ") + "" + test + "\n";
}Run Code Online (Sandbox Code Playgroud)
.valid { color: green; }
.invalid { color: red; }Run Code Online (Sandbox Code Playgroud)
<pre id="output"></pre>Run Code Online (Sandbox Code Playgroud)
这会处理unicode等,所以它有点冗长.Source是验证插件本身.一些注意事项:它可能是你想要的,但它并不严格正确.通常,如果要接受类似的内容http://w并且http://localserver在Intranet环境中有效但在大多数Web表单中通常不允许,则需要选择稍微不同的正则表达式.在某种程度上,这个正则表达式更安全,因为在这种情况下它需要FQDN.类似地,其他示例(如自定义协议)在此处被拒绝,但是有效并且可用于当今使用的许多内容.如果你问用户"你的主页是什么?" 尽管如此......你可能想要排除这些.
以后发现这个问题的任何人:请随意使用我提供的代码片段测试其他测试用例,如果您觉得应该提及新的常见案例,请更新答案.我用最新的正则表达式重新编写了答案,并以此格式更好地为社区服务.
小智 30
非常感谢Meo和Nick,我把你的答案放在一起,它的效果非常好.
if(/^(http|https|ftp):\/\/[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}(:[0-9]{1,5})?(\/.*)?$/i.test($("#url").val())){
alert("valid URL");
} else {
alert("invalid URL");
}
Run Code Online (Sandbox Code Playgroud)
Jam*_*erg 11
如果您确定您的受众使用的是HTML5,则可以使用它type="url"来验证文本字符串.您还可以动态创建输入元素,设置类型并测试变量是否为有效URL.
以下是基于https://www.raymondcamden.com/2016/10/19/using-html-form-validation-in-pure-javascript的博客文章
var elm;
function isValidURL(u){
if(!elm){
elm = document.createElement('input');
elm.setAttribute('type', 'url');
}
elm.value = u;
return elm.validity.valid;
}
console.log(isValidURL('http://www.google.com/'));
console.log(isValidURL('//google.com'));
console.log(isValidURL('google.com'));Run Code Online (Sandbox Code Playgroud)
是的正则表达式:
/^(http|https|ftp):\/\/[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}(:[0-9]{1,5})?(\/.*)?$/ix
Run Code Online (Sandbox Code Playgroud)
var url = $('input.surl').val();
url_validate = /(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/;
if(!url_validate.test(url)){
alert('error');
}
else{
alert('success');
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
83472 次 |
| 最近记录: |