让用户输入格式正确的URL的最佳方法是什么?

Phi*_*hil 14 .net c# validation wpf user-interface

我正在使用MVVM创建一个对话框,提示用户输入一个http:// URL到KML文件.当URL格式正确时,需要启用"确定"按钮,当URL格式不正确时,需要禁用该按钮.

现在按钮绑定到ICommand,CanExecute()的逻辑如下所示:

return !string.IsNullOrEmpty(CustomUrl);
Run Code Online (Sandbox Code Playgroud)

每次按键时都会引发命令的CanExecuteChanged事件,到目前为止它运行良好.

现在我想做一些实际的验证.我知道这样做的唯一方法如下:

try
{
    var uri = new Uri(CustomUrl);
}
catch (UriFormatException)
{
    return false;
}

return true;
Run Code Online (Sandbox Code Playgroud)

这不是bueno,特别是因为每次击键都会进行验证.我可以这样做,以便在用户点击OK按钮时验证URI,但我宁愿不这样做.除了捕获异常之外,还有更好的方法来验证URI吗?

Yah*_*hia 35

是的-你可以使用静态方法Uri.IsWellFormedUriString这个

return Uri.IsWellFormedUriString (CustomUrl, UriKind.Absolute);
Run Code Online (Sandbox Code Playgroud)

  • 好吧,dang,每天学习新东西. (4认同)

as-*_*cii 7

在我看来,可能的解决方案是两个:

  • 创建一个检查URL正确性的正则表达式;
  • 使用Uri.TryCreate方法以避免异常(如果您不需要创建Uri对象,则可以使用Uri.IsWellFormedUriString方法);

我更愿意使用第二种选择,创建正确的RegEx可能很困难并且可能导致许多问题.

  • 没有'Uri.TryParse`!也许你的意思是'Uri.TryCreate`? (2认同)