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

咨询区

  • 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 用来做服务器端验证是一个绝佳的方式。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/296699.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

svn命令在linux下的使用

1、将文件checkout到本地目录 引用svn checkout path(path是服务器上的目录) 例如:svn checkout svn://192.168.1.1/pro/domain 简写:svn co2、往版本库中添加新的文件 引用svn add file 例如:svn add test.php(添加te…

学生渐进片add如何给_渐进镜片的说明与镜架选择

近年来,许多眼镜店都进行了渐进多焦点镜片(下面简称:渐进镜片)的推广与应用,产品也越来越普及,但由于很多眼镜店并没有对从业人员进行系统培训,同时对渐进镜片的了解又甚少,在一些注意事项上经验不足&#…

html5 svg组态图,绘制SVG内容到Canvas的HTML5应用

SVG与Canvas是HTML5上绘制图形应用的两种完全不同模式的技术,两种绘制图形方式各有优缺点,但两者并非水火不容,尤其是SVG内容可直接绘制在Canvas上的功能,使得两者可以完美的融合在一起,让Canvas可享用到现有丰富的SVG…

天哪!男朋友对大姨妈的误解有多深?

1 大姨妈就是随时随地给你一拳那种▼2 怀疑不是袜子太紧而是腿太粗▼3 画面戛然而止希望小姑娘她妈下手轻点▼4 大家都是艺术生▼5 “你妈式”量体温▼6 当代网友上网冲浪的最大阻碍▼7 给你个眼神你自己体会~▼你点的每个赞,我都认真当成了喜欢

[转]经典SQL语句大全

一、基础 1、说明:创建数据库 CREATE DATABASE database-name 2、说明:删除数据库 drop database dbname 3、说明:备份sql server --- 创建 备份数据的 device USE master EXEC sp_addumpdevice disk, testBack, c:\mssql7backup\MyNwind_1.…

TreeSet集合中的自定义比较器

import java.util.Comparator; import java.util.TreeSet; /* 当treeset集合中的元素不具备比较功能,或者具备的比较功能不是所需要的 例如person对象中的自然排序是按照年龄进行排序的,但现在的需求是按照姓名进行排序,改源代码的方式不可…

python34怎么安装_简明Python3教程 4.安装

如果你已经安装了Python 2.x,你不需要在安装Python 3.0前卸载Python 2.x。这两者可以共存。GNU/Linux用户和BSD用户如果你使用类似于Ubuntu、Fedora、OpenSUSE、Debian、CentOS或其他你选择的GNU/Linux发行版,或类似于FreeBSD的BSD系统,你的系…

Dapr + .NET 实战(十四)虚拟机集群部署 mDNS + Consul

前面我们说了在单机模式下和K8S集群下的Dapr实战,这次我们来看看如何在不使用K8S的情况下,在一个传统的虚拟机集群里来部署Dapr。1.环境准备我们准备两台centos7虚拟机Dapr1:192.168.43.131Dapr2:192.168.43.1322.Dapr CLI安装分别…

哪个男孩不想拥有这种牌面?

1 全国最嗨的烧烤地摊没有之一▼2 为什么我们的雨刷和别人的不一样?▼3 好羡慕有这样的妈妈▼4 猫:你别进来,我这儿不接待小孩儿!孩子:我就进去看看▼5 像极了我考试的样子▼6 今天教大家一个找钻石的好办法▼7 …

有意思的记录-shell(持续更新)

1.统计重复行的个数 sort uid.txt | uniq -c 2.查看压缩文件 cat *.gz | gunzip > 123 3.查看2个文件的交集、差集 comm用于比较两个有序文件,默认第一列为第一个文件独有的元素,第二列为第二个文件独有的元素,第三列为共有元素&#xff0…

html怎么快速打出来的,javascript – 快速打印HTML5画布

我搜索了很多,找到了一个完美的解决方案:)使用onclick事件function printCanvas(){var dataUrl document.getElementById(anycanvas).toDataURL(); //attempt to save base64 string to server using this varvar windowContent ;windowContent windowContent Print canvas…

OutOfMemoryException异常解析

一、概述在国庆休假快结束的最后一天晚上接到了部门老大的电话,某省的服务会出现崩溃问题。需要赶紧修复,没错这次的主角依旧是上次的“远古项目”没有办法同事都在休假没有人能帮忙开电脑远程只能打车去公司。远程链接上服务器之后查看日志发现抛出的堆…

LeetCode:Largest Number - 求整型数组中各元素可拼合成的最大数字

2019独角兽企业重金招聘Python工程师标准>>> 1、题目名称 Largest Number(求整型数组中各元素可拼合成的最大数字) 2、题目地址 https://leetcode.com/problems/largest-number/ 3、题目内容 英文:Given a list of non negative i…

js实现样式切换

2019独角兽企业重金招聘Python工程师标准>>> <ul id"styles"> <li id"default">经典</li> <li id"blue">淡蓝</li> <li id"brown">棕色</li> </ul> $("#styles li&…

CV算法面试题学习

本文记录了CV算法题的学习。 CV算法面试题学习 1 点在多边形内&#xff08;point in polygon&#xff09;2 高斯滤波器3 ViTPatch EmbeddingPosition EmbeddingTransformer Encoder完整的ViT模型 4 SE模块5 Dense Block6 Batch Normalization 1 点在多边形内&#xff08;point …

tinyid 教程_tinyid

软件简介tinyid 是滴滴开发的 id 生成器 分布式id生成系统&#xff0c;简单易用、高性能、高可用的id生成系统。提供的 REST API&#xff1a;nextId:curl http://localhost:9999/tinyid/id/nextId?bizTypetest&token0f673adf80504e2eaa552f5d791b644cresponse:{"data…

【推荐软件】wingrep

linux下搜索文本中的字符串时&#xff0c;习惯了find和grep的结合&#xff0c;很强大&#xff0c;但是windows下没有这两个命令&#xff0c;不用IDE编程时搜索略显不便。google一下&#xff0c;原来有wingrep工具可以用&#xff0c;可以实现相同的功能&#xff0c;来推荐一下给…

flash如何转html5,闪客精灵如何将Flash格式转换成HTML5

如何将Flash格式转换成HTML5?闪客精灵就是为Flash格式转换为HTML5而生的&#xff0c;他能够快速的将任何Flash文件&#xff0c;不管是SWF还是EXE格式的Flash格式转换成能被HTML5识别的HTML格式的文件。那么如何用闪客精灵将Flash格式转换为HTML5呢?下面是关于闪客精灵将Flash…

一壶 100℃ 的开水从多高倒进嘴里不会觉得烫?

全世界只有3.14 % 的人关注了爆炸吧知识先说结论&#xff1a;大约50米左右。 水从高空落下&#xff0c;先倒的水快&#xff0c;后倒的水慢&#xff0c;所以必然很快撕裂&#xff0c;成为细小的水滴。因此&#xff0c;这里就只讨论水滴的散热问题&#xff0c;而不考虑一大团水的…

Shell特殊变量

$ 表示当前Shell进程的ID&#xff0c;即pid $echo $$运行结果 2934特殊变量列表 变量含义$0当前脚本的文件名$n传递给脚本或函数的参数。n 是一个数字&#xff0c;表示第几个参数。例如&#xff0c;第一个参数是$1&#xff0c;第二个参数是$2。$#传递给脚本或函数的参数个数。…