Регулярное выражение для URL-адреса

Я написал регулярное выражение для проверки URL-адреса, который может быть похож на

Все 4 работают

Теперь, если я вхожу в текст типа (www.example.com – thisisincorrect), он позволяет мне вводить и сохранять в db

Регулярное выражение, которое я использовал:

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

а также

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

Пожалуйста помоги!

Добавьте ^ и $

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

Это соответствует началу строки ( ^ ) и end ( $ )

Вам не нужно регулярное выражение для URL-адресов, для этого используйте class 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-адресе есть много потенциальных ловушек, таких как параметры, нераспределенные домены, url, содержащие ip вместо домена ….)

Вы ищете это

Без 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 как необязательные, так и проверять пустое пространство, не включенное в url.

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