我需要为CS表单进行URL验证。我已经有一个脚本,检查http并添加它,如果没有。但是,如果我添加另一个函数来进行验证,无论我把它放在哪里,它都会返回URL无效。
这就是我正在运行的
<script type="text/javascript">
$(function(){
$('.url').blur(function(e) {
if ($(this).val().match(/^http/) || $(this).val().match(/^https/)) /*define the http & https strings */ {
$.noop() /*if strings exist, do nothing */
}
else {
// get value from field
var cur_val = $(this).val();
// do with cur_val
$(this).val('http://' + cur_val);
}
});
});
</script>
这是我用于验证的第二个函数:
<script type="text/javascript">
function validate() {
var url = document.getElementById("url").value;
var pattern = /(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/;
if (pattern.test(url)) {
alert("Url is valid");
return true;
}
alert("Url is not valid!");
return false;
}
</script>
我做错了什么?我试图合并这两个函数但我的js技能选择了确切的失败时刻。
谢谢!
答案 0 :(得分:1)
我不知道,如果这是你正在寻找的,
var pattern = /(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/;
pattern.test("http://google.com"); // True
pattern.test("google.com"); // False
您正在使用的if条件无用,因为无论如何都会返回模式匹配的结果。
因此更新的验证功能应该只返回模式结果&amp;应该是这样的:
function validate() {
var url = document.getElementById("url").value;
var pattern = /(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/;
return pattern.test(url);
}
假设有一个ID url 的DOM元素。
答案 1 :(得分:0)
从即时的角度来看,看起来您的“添加http”功能正在寻找带有class="url"
的标签,而验证功能正在寻找带有id="url"
的标签。如果你没有任何id,那么我认为它总是会返回无效。