URL的正则表达式

我写了正则表达式来validationURL,可能就像

  • example.com

  • www.example.com

  • http://www.example.com

  • https://www.example.com

所有4个都在工作

现在,如果我输入的文本(www.example.com – thisisincorrect),它允许我输入并保存到db

我使用的正则表达式是:

http(s)?://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)? 

 ([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)? 

请帮忙!

添加^$

 ^http(s)?://([\w-]+.)+[\w-]+(/[\w- ./?%&=])?$ 

这匹配字符串( ^ )和结束( $ )的开头

您不需要URL的正则表达式,请使用System.Uri类。 例如,通过使用Uri.IsWellFormedUriString方法:

 bool isUri = Uri.IsWellFormedUriString(url, UriKind.RelativeOrAbsolute); 

最佳正则表达式:

 private bool IsUrlValid(string url) { string pattern = @"^(http|https|ftp|)\://|[a-zA-Z0-9\-\.]+\.[a-zA-Z](:[a-zA-Z0-9]*)?/?([a-zA-Z0-9\-\._\?\,\'/\\\+&%\$#\=~])*[^\.\,\)\(\s]$"; Regex reg = new Regex(pattern, RegexOptions.Compiled | RegexOptions.IgnoreCase); return reg.IsMatch(url); } 

在为严格匹配创建正则表达式时,必须确保它以’^’开头并以’$’结束。 否则,正则表达式将查看它是否找到匹配的子字符串。

  • ‘^’表示匹配行的开头
  • ‘$’表示匹配行尾。

但是,使用正则表达式来匹配URL是容易出错的:更好地依赖现有框架做得更好(url中有很多潜在的陷阱,比如参数,未知域,包含ip而不是域的URL ….)

你正在寻找这个

没有Http:

 @"^(www.|[a-zA-Z].)[a-zA-Z0-9\-\.]+\.(com|edu|gov|mil|net|org|biz|info|name|museum|us|ca|uk)(\:[0-9]+)*(/($|[a-zA-Z0-9\.\,\;\?\'\\\+&%\$#\=~_\-]+))*$" 

使用Http:s:

 @"^(((ht|f)tp(s?))\://)?(www.|[a-zA-Z].)[a-zA-Z0-9\-\.]+\.(com|edu|gov|mil|net|org|biz|info|name|museum|us|ca|uk)(\:[0-9]+)*(/($|[a-zA-Z0-9\.\,\;\?\'\\\+&%\$#\=~_\-]+))*$" 

要么

 @"^[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(/\S*)?$"; 

这对我有用:

 string pattern = @"^(ht|f)tp(s?)\:\/\/[0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*(:(0-9)*)*(\/?)([a-zA-Z0-9\-\.\?\,\'\/\\\+&%\$#_]*)?$"; Regex regex = new Regex(pattern, RegexOptions.Compiled | RegexOptions.IgnoreCase); string url= txtAddressBar.Text.Trim(); if(regex.IsMatch(url) { //do something } 

这是为了支持http,https作为可选,并且validation空白空间不包含在url中。

 this.isValidURL = function (url) { if (!url) return false; const expression = /^(?:http(s)?:\/\/)?[\w.-]+(?:\.[\w\.-]+)+[\w\-\._~:/?#[\]@!\$&'\(\)\*\+,;=.]+$/gm; return url.match(new RegExp(expression)); }