Регулярное выражение URL
Иногда в веб-приложении необходимо реализовать получение URL от пользователя. Это не очень сложно, но и не так просто как может показаться, ведь пользователь может ввести что угодно. Требуется проверить введенный пользователем URL на корректность. Поможет нам в этом регулярное выражение.
С помощью регулярных выражений можно проверить что угодно, например, можно проверить валидность e-mail, IP адрес, телефонный номер, ZIP код, и даже имя. Вот небольшая коллекция полезных регулярных выражений и пример программной реализации одного из них на C#.
Мы будем использовать специальный элемент управления — RegularExpressionValidator. Если вам нужен пример программной реализации, т.е. прямо в коде в виде функции, то по ссылке выше вы можете найти очень хороший пример.
Регулярное выражение
^(ht|f)tp(s?)\:\/\/[0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*(:(0-9)*)*(\/?)([a-zA-Z0-9\-\.\?\, \'\/\\\+&%\$#_]*)?$
Выглядит и правда эффектно. Но у этого регулярного выражения есть несколько минусов. Мне больше понравилось это:
^(?#Protocol)(?:(?:ht|f)tp(?:s?)\:\/\/|~\/|\/)?(?#Username:Password)(?:\w+:\w+@) ?(?#Subdomains)(?:(?:[-\w]+\.)+(?#TopLevel Domains)(?:com|org|net|gov|mil|biz| info|mobi|name|aero|jobs|museum|travel|[a-z]{2}))(?#Port)(?::[\d]{1,5})? (?#Directories)(?:(?:(?:\/(?:[-\w~!$+|.,=]|%[a-f\d]{2})+)+|\/)+|\?|#)?(?#Query) (?:(?:\?(?:[-\w~!$+|.,*:]|%[a-f\d{2}])+=?(?:[-\w~!$+|.,*:=]|%[a-f\d]{2})*)(?:& (?:[-\w~!$+|.,*:]|%[a-f\d{2}])+=?(?:[-\w~!$+|.,*:=]|%[a- f\d]{2})*)*)*(?#Anchor)(?:#(?:[-\w~!$+|.,*:=]|%[a-f\d]{2})*)?$
Это вообще сложное, учитывает даже доменную зону. Но выбирать вам.
Реализация
Выкладываем TextBox. В него будет писаться URL. Изменяем его ID на tbUrl. Код выглядит так:
URL: <asp:TextBox ID="tbUrl" runat="server">http://</asp:TextBox>
Затем, выкладываем (например, перед TextBox) контрол RegularExpressionValidator и устанавливаем свойства:
1. ErrorMessage=Введите корректный URL
Это сообщение которое будет показываться в случае неверного URL
2. ValidationExpression=^(ht|f)tp(s?)\:\/\/[0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*(:(0-9)*)*(\/?)([a-zA-Z0-9\-\.\?\,\’\/\\\+&%\$#_]*)?$
Это само регулярное выражение. Будем пользоваться первым.
3. ControlToValidate=tbUrl
Тут указываем ID компонента (в нашем случае ID TextBox’а) из которого будет браться проверяемая информация.
4. Display=Dynamic
Говорим, что проверка будет осуществляться динамически, т.е. после потери фокуса контрола. На мой взгляд это удобнее для пользователя.
Результат
В итоге код будет выглядеть примерно так:
<asp:RegularExpressionValidator ID="RegularExpressionValidator1" runat="server" ErrorMessage="Введите корректный URL" ValidationExpression="^(ht|f)tp(s?)\:\/\/[0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])* (:(0-9)*)*(\/?)([a-zA-Z0-9\-\.\?\,\'\/\\\+&%\$#_]*)?$" ControlToValidate="tbUrl" Display="Dynamic" /> <br /> URL: <asp:TextBox ID="tbUrl" runat="server">http://</asp:TextBox>
Ну вот и все, запускайте и проверяйте. Кстати, верным будет, например такой URL:
http://www.TechWeek.ru/