Ответ 1
Да - вы можете использовать статический метод Uri.IsWellFormedUriString
для этого
return Uri.IsWellFormedUriString (CustomUrl, UriKind.Absolute);
Я создаю диалог с использованием MVVM, который предлагает пользователю ввести URL http://в файл KML. Кнопка "ОК" должна быть включена, когда URL-адрес находится в правильном формате, и его необходимо отключить, если URL-адрес находится в неправильном формате.
Прямо сейчас кнопка привязана к ICommand, и логика CanExecute() выглядит так:
return !string.IsNullOrEmpty(CustomUrl);
Команда CanExecuteChanged добавляется к каждому нажатию клавиши, и пока она хорошо работает.
Теперь я хочу сделать немного фактической проверки. Единственный способ, которым я это знаю, заключается в следующем:
try
{
var uri = new Uri(CustomUrl);
}
catch (UriFormatException)
{
return false;
}
return true;
Это не bueno, тем более, что валидация происходит при каждом нажатии клавиши. Я мог бы сделать так, чтобы URI был проверен, когда пользователь нажимает кнопку "ОК", но я бы предпочел. Есть ли лучший способ проверить URI, кроме исключения исключений?
Да - вы можете использовать статический метод Uri.IsWellFormedUriString
для этого
return Uri.IsWellFormedUriString (CustomUrl, UriKind.Absolute);
Возможные решения, по моему мнению, два:
Uri.TryCreate
, чтобы избежать исключений (если вам не нужно создавать объект Uri, вы можете использовать метод Uri.IsWellFormedUriString
);Я бы предпочел использовать второй вариант, создание правильного RegEx может быть трудным и может привести к множеству проблем.
Вы можете добавить ValidationRules в элемент управления, и проверка будет выполнена "по волшебству".
Вы можете просто использовать Regex.IsMatch
И здесь надежный шаблон:
\ Ь ((: [AZ] [\ ш -] +: (: (я?)?/{1,3} | [а-z0-9%]) | WWW\д {0,3 } | [а-z0-9.-] + [AZ] {2,4}/): [< > (^\s (+ | (([^\s ([.] [.]?)] ) < > ] + | (([^\s() < > ] +))))) + ((([^\s() < > ] + | (([^\s (? ) < | ' ".?, < > "" ""' > ] +)))) [! ^\s`() [] {};:]))
Поскольку вы уже подключаетесь к событию нажатия клавиши, вы можете использовать проверку правильности выражения в строке, тогда вам решать, следует ли ее помечать как недопустимое или вообще не разрешать. Этот пост похож и имеет регулярное выражение для допустимого URI.