目前我有一个输入框,可以检测URL并解析数据.
所以现在,我正在使用:
var urlR = /^(?:([A-Za-z]+):)?(\/{0,3})([0-9.\-A-Za-z]+)
(?::(\d+))?(?:\/([^?#]*))?(?:\?([^#]*))?(?:#(.*))?$/;
var url= content.match(urlR);
Run Code Online (Sandbox Code Playgroud)
问题是,当我输入一个URL时www.google.com,它不起作用.当我进入时http://www.google.com,它正在工作.
我的正则表达式不是很流利.谁能帮我?
我无法使自定义网址验证规则生效。
我要添加新规则:
jQuery.validator.addMethod("complete_url", function(val, elem) {
// if no url, don't do anything
return /((([A-Za-z]{3,9}:(?:\/\/)?)(?:[-;:&=\+\$,\w]+@)?[A-Za-z0-9.-]+|(?:www.|[-;:&=\+\$,\w]+@)[A-Za-z0-9.-]+)((?:\/[\+~%\/.\w-_]*)?\??(?:[-\+=&;%@.\w_]*)#?(?:[\w]*))?)/.test(val);
});
...
$("#new_website").validate({
rules: {
url: "complete_url",
'website[url]': {
url: true,
required: true}
}
});
Run Code Online (Sandbox Code Playgroud)
但这让我回来
invalid URL
Run Code Online (Sandbox Code Playgroud)
我检查了正则表达式在这里- http://www.rubular.com/。它正在工作,但是失败了我的自定义验证器。
我做错了什么?
在我的输入字段验证中,我将输入类型设置为“url”。
具有“http://”或“https://”协议的 URL 是有效的。没有它,网址无效。
有效:http : //www.foo.com
有效:https : //www.foo.com
无效:www.foo.com
无效:foo.com
在我的代码中,每当 URL 链接没有“http://”或“https://”时,函数“checkURL()”就会像下面的代码一样添加它。
// just for the demos, avoids form submit
jQuery.validator.setDefaults({
debug: true,
success: "valid"
});
$( "#myform" ).validate({
rules: {
field: {
required: true,
url: true
}
}
});
function checkURL(url) {
var string = url.value;
if (!~string.indexOf("http")) {
string = "http://" + string;
}
url.value = string;
return url;
}Run Code Online (Sandbox Code Playgroud)
<form id="myform">
<label for="field">Required, URL: </label><br>
<input type="url" id="field" name="field" onblur="checkURL(this)">
</form>
<script …Run Code Online (Sandbox Code Playgroud)