咨询区

  • kenchilada

我发现 framework 里有两个验证url有效性的方法:Uri.IsWellFormedUriStringUri.TryCreate ,我试了一下这两个方法在验证 文件路径 时都返回 true。

请问我有什么有效的方法可以验证某个 string 是否为有效的 HTTP URL 格式呢?

回答区

  • Erçin Dedeoğlu

可以用 Uri.TryCreate 实现,为此我写了一个扩展方法。

public static bool CheckURLValid(this string source){Uri uriResult;return Uri.TryCreate(source, UriKind.Absolute, out uriResult) && uriResult.Scheme == Uri.UriSchemeHttp;}

然后像下面这样使用。

string url = "htts://adasd.xc.";
if(url.CheckUrlValid())
{//valid process
}
  • 41686d6564

我发现大家的答案都有两个问题。

  1. 都允许 file://,  ftp:// 开头的 url。

  2. 如果url没有以 http://https://  开头则不能通过,eg:(google.com)

所以这并不完美,那如何解决呢?下面是我优化后的方案。

public static bool ValidHttpURL(string s, out Uri resultURI)
{if (!Regex.IsMatch(s, @"^https?:\/\/", RegexOptions.IgnoreCase))s = "http://" + s;if (Uri.TryCreate(s, UriKind.Absolute, out resultURI))return (resultURI.Scheme == Uri.UriSchemeHttp || resultURI.Scheme == Uri.UriSchemeHttps);return false;
}

然后用下面的方式进行测试。

string[] inputs = new[] {"https://www.google.com","http://www.google.com","www.google.com","google.com","javascript:alert('Hack me!')"};
foreach (string s in inputs)
{Uri uriResult;bool result = ValidHttpURL(s, out uriResult);Console.WriteLine(result + "\t" + uriResult?.AbsoluteUri);
}

输出结果。

True    https://www.google.com/
True    http://www.google.com/
True    http://www.google.com/
True    http://google.com/
False

点评区

在用户表单验证中,这种需求还是非常常见的, Uri.TryCreate 用来做服务器端验证是一个绝佳的方式。

NET问答: 如何检查一个 string 是否为有效的 url 格式?相关推荐

  1. 如何检查一个Python字符串是否只包含数字?

    如何检查一个Python字符串是否只包含数字? python String类中有一个名为isdigit()的方法,如果字符串中所有字符都是数字且至少有一个字符,则返回true,否则返回false. p ...

  2. php 字符串包含另一个字符串_leetcode1433_go_检查一个字符串是否可以打破另一个字符串...

    leetcode1433_检查一个字符串是否可以打破另一个字符串 01 - 题目 给你两个字符串 s1 和 s2 ,它们长度相等,请你检查是否存在一个 s1 的排列可以打破 s2 的一个排列, 或者是 ...

  3. C语言检查一个字符串是否为另一个字符串的子字符串的算法(附完整源码)

    C语言检查一个字符串是否为另一个字符串的子字符串的算法 C语言检查一个字符串是否为另一个字符串的子字符串的算法完整源码(定义,实现,main函数测试) C语言检查一个字符串是否为另一个字符串的子字符串 ...

  4. java中怎么表示数组中的某个值_简易Java(12):如何高效检查一个数组中是否包含某个值?...

    如何检查一个数组(未排序)中是否包含某个特定的值?在Java中,这是一个非常有用并又很常用的操作.同时,在StackOverflow中,有时一个得票非常高的问题.在得票比较高的几个回答中,时间复杂度差 ...

  5. Java中怎么样检查一个字符串是不是数字呢

    问题:Java中怎么样检查一个字符串是不是数字呢 在解析之前,怎么样检查一个字符串是不是数字呢 回答一 这些通常是由一个简单的用户自定义函数去解决的(即,自带的 "isNumeric&quo ...

  6. java检查两个字符串是否包含,java判断一个字符串是否包含另外一个字符串,java另外一个,要检查一个字符串是否包含...

    java判断一个字符串是否包含另外一个字符串,java另外一个,要检查一个字符串是否包含 要检查一个字符串是否包含另外一个字符串需要使用indexOf()方法,如果indexOf方法返回大于等于0的值 ...

  7. 如何高效检查一个数组中是否包含某个值?

    转载地址:http://www.diguage.com/archives/112.html 1.不同的实现方式 1) 使用List: public static boolean useList(Str ...

  8. java set子集_Java程序来检查一个集合是否是另一个集合的子集

    Java程序来检查一个集合是否是另一个集合的子集 在这个实例中,我们将学习Java中检查一个集合是否是另一个集合的子集. 要理解此示例,您应该了解以下Java编程主题: 示例1:使用HashSet类检 ...

  9. 用new关键字对一个String 变量赋值和用literal值直接赋值有什么不同(转)

    String str1="ABC": 和String str2 = new String("ABC"); 有什么区别. String str1="AB ...

最新文章

  1. ERROR: Manifest merger failed : uses-sdk:minSdkVersion 24 cannot be smaller than version 27 declared
  2. php 远程下载图片到本地
  3. JSP简单练习-数组应用实例
  4. java并发编程实践 读书笔记_Java - 并发编程实践(读书笔记)
  5. 【Python基础】Python数据分析实战之分布分析
  6. C语言的特点是什么?
  7. mysql group函数_MySQL函数:group_concat()函数
  8. char数组转string_String类和其它数据类型的相互转换
  9. 【Java】数据结构——队列(图文)
  10. 波音737-800座位图哪个好_「科普」汽车哪个座位才安全?很多人都不知道
  11. 数据库的增删改查和使用流程
  12. 如何为团队选择有用的增量进度衡量标准
  13. python有参装饰器详解_Python 带有参数的装饰器实例代码详解
  14. Pandas系列(十四)数据转换函数map、apply、applymap以及分组apply
  15. MySQL 大数据量分页性能优化
  16. Linux shell 数组
  17. 管理感悟:当领导就要敢于,及时做出决策
  18. 光盘文件导入服务器,web服务器 光盘文件
  19. 【递归,Java从入门到精通第五版pdf百度云
  20. html和css命名标准,CSS命名规则和命名方法

热门文章

  1. CISCO IOS SLB服务器负载均衡
  2. bindresult必须在哪个位置_手机视频剪辑工具哪个好?清爽视频编辑APP有人推荐吗?...
  3. robotframework(12)修改用户密码(从数据库查询短信验证码)
  4. linux系统下nginx安装目录和nginx.conf配置文件目录
  5. js将时间戳格式化为HH:ii:ss的格式
  6. Jzoj5317 Func
  7. [asp.net mvc 奇淫巧技] 04 - 你真的会用Action的模型绑定吗?
  8. QtWebkit中浏览器插件的设计-1
  9. android 小黄车首页,android采用MVP漫画APP、适配刘海屏、小黄车主界面、录音波浪动画、综合APP等源码...
  10. 如何发现假库存照片(并将合适的人归于属性)