URL验证不应该在开头接受空字符串

时间:2017-05-22 14:41:38

标签: javascript jquery regex

我正在尝试验证网址。它不应该在开头和中间包含空格。如果我们不输入完整的URL,它应该抛出错误警报。例如,如果输入为www.google,则应抛出以下异常:

  

'请输入完整的网址'

有人可以帮我解决这个问题吗?

谢谢

3 个答案:

答案 0 :(得分:0)

您可以使用jQuery validate插件来确保有效的网址。以下是the website

中的一些示例代码
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Makes "field" required and a url.</title>
<link rel="stylesheet" href="https://jqueryvalidation.org/files/demo/site-demos.css">



</head>
<body>
<form id="myform">
<label for="field">Required, URL: </label>
<input class="left" id="field" name="field">
<br/>
<input type="submit" value="Validate!">
</form>
<script src="https://code.jquery.com/jquery-1.11.1.min.js"></script>
<script src="https://cdn.jsdelivr.net/jquery.validation/1.16.0/jquery.validate.min.js"></script>
<script src="https://cdn.jsdelivr.net/jquery.validation/1.16.0/additional-methods.min.js"></script>
<script>
// just for the demos, avoids form submit
jQuery.validator.setDefaults({
  debug: true,
  success: "valid"
});
$( "#myform" ).validate({
  rules: {
    field: {
      required: true,
      url: true
    }
  }
});
</script>
</body>
</html>

答案 1 :(得分:0)

您可以使用正则表达式将输入的字符串与您的模式匹配。根据您对url模式的规范,以下示例可能会这样做:

var regex = /^(http)s?(:\/\/www)(\.\w{2,}){2,3}$/;

$("#check").on("click", function(e){
  e.preventDefault();
  var url = $("#url").val();
  if( regex.test(url) ){
    alert("URL is complete");
  }else{
    alert("Please enter a complete url");
  }
});//#check click()
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>
<input id="url" value="https://www.google.com" />
<button id="check">Validate</button>

答案 2 :(得分:0)

  

我希望httphttps位于第一个,然后是www,然后是两个或三个组件,后面跟它,它不应该在开头允许空格。

REGEX:regex101 1

^https?:\/\/www\.(?:[a-z0-9]-?)+[^-\.]\.[a-z]{2,15}(?:\.[a-z]{2})?$
  • ^https? httphttps开头,因此?之后的 s 信。
  • :\/\/www\. 匹配://www. 2
  • (?: 启动非捕获组。
  • [a-z0-9]-? 匹配&#34;名称&#34;域名的一部分,只有字母和数字可能在开头之后有一个连字符 -
  • )+[^-\.] 关闭非捕获组,可能会出现多次[a-z0-9]-?以匹配http://www.some-domain-name.com等网址,并且应该< em> not 以点 . 或连字符 - 结束,因此[^-\.]部分。
  • \. 匹配点.
  • [a-z]{2,15} 是一组215,仅限字母,与域名的gTLD [generic top-level domain]部分相匹配。
  • (?:\.[a-z]{2})?$ 结束正则表达式,一组2个字母的非捕获组仅代表ccTLD [country code top level domain]部分,此部分可能存在或不存在这个原因我们在小组之后有 ?

代码:jsFiddle 1

&#13;
&#13;
var domains = document.querySelectorAll('#domains-list li'),
  $URLregX = /^https?:\/\/www\.(?:[a-z0-9]-?)+[^-\.]\.[a-z]{2,15}(?:\.[a-z]{2})?$/i;

for (var i = 0, ln = domains.length; i < ln; i++) {
  var th = domains[i],
    urlText = th.innerHTML,
    $span = ($URLregX.test(urlText)) ? ' <span class="matched">Matched</span>' : ' <span class="not-matched">NOT Matched</span>';

  th.innerHTML = urlText + $span;
}
&#13;
*{ padding:0; font-family:verdana, sans-serif; font-size:1em; }
li{ padding: 10px; border-bottom:1px dotted #AAA; }
li:nth-child(even){ background-color:#EEE; }
li span{ color:white; padding:3px 5px; border-radius:3px; font-size:12px; }
.matched{ background-color:green; }
.not-matched{ background-color:darkred; color:white; }
&#13;
<ul id='domains-list'>
  <li>http://www.google.co.sa</li>
  <li>http://WWW.EXAMPLE.NET</li>
  <li>http://www.google.com</li>
  <li>http://www.some-site.engineering</li>
  <li>https://www.google.com</li>
  <li>http://www.efg-cba.asdfgh</li>
  <li>http://maps.google.com</li>
  <li>httphttps://www.example.net</li>
  <li>http://abc.site-name.com</li>
  <li>https://some-sub-domain.exam-ple.musem.uk</li>
  <li>http://google.com</li>
  <li>http://sub-domain.example-site.engineering</li>
  <li>http://test-www.mi-creativity.com</li>
  <li>https://google.co.in</li>
  <li>www.google</li>
  <li>www.google.com</li>
  <li>mail.google.com</li>
  <li>://www.google</li>
  <li>//www.google</li>
  <li>:google.com</li>
  <li>http://www..google.co.sa</li>
  <li>http://www.google..co.uk</li>
  <li>http://www.google.co..uk</li>
  <li>htt:google.com</li>
  <li>http:google.com</li>
  <li>http:/google.com</li>
  <li>http//www.google.com</li>
  <li>http://www.go ogle.com</li>
  <li>http://www.google.c om</li>
  <li>http://www.-google.com </li>
  <li>http://www.g--oogle.com </li>
  <li>http://www.google-.com</li>
  <li>http://www.-google.com</li>
  <li>http://www.g--oogle.com</li>
  <li>http://www.example.c</li>
</ul>
&#13;
&#13;
&#13;

  

如果我没有输入完整的网址,则应该提醒我

jsFiddle 2

备注:

  1. 此正则表达式适用于仅以英文编写的URL,可能存在以英语以外的语言编写的URL或TLD,如:阿拉伯语,中文,印度语,日语和俄语,上述正则表达式将不匹配任何一种。 List of top-level domains
  2. 虽然子域可以是字母,数字和连字符的组合,但正则表达式仅检查www,因为这是OP要求的,检查子域部分的通常可能性,this regex适用于常规子域以及 no 子域http://example.com的情况。