请教用正则判断一个url是否符合要求的问题

逍遥散人 2010-11-05 09:07:30
需求:
1、协议只需考虑http://和https://(允许没有);
2、只匹配顶级域名和www开头的域名;
3、允许带端口;
4、出现子目录和文件名称(除了几个定义好的名称外)的均认为不匹配;

如(带括弧表示可有可无):
1、(http://)www.sina.com(/) 匹配;
2、(https://)www.sina.org(/) 匹配;
3、(http://)www.sina.com(:9999)(/) 匹配;
4、(http://)www.sina.cn/index.*(后缀名无所谓) 匹配
5、(http://)www.sina.net/default.*(后缀名无所谓) 匹配
6、(http://)sina.com 匹配

6、(http://)www.sina.com/ad 不匹配
7、(http://)www.sina.com/ad/index.* 不匹配
8、(http://)ad.sina.com/dgffg... 不匹配

不知道我写得是否清晰,请大家多多帮忙了,谢谢!

如果实在不能用正则,用哪种方式能有更好的执行效率?
...全文
321 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
逍遥散人 2010-11-06
  • 打赏
  • 举报
回复
忘了说了,例子里面括弧表示里面的值可写可不写
逍遥散人 2010-11-06
  • 打赏
  • 举报
回复
(?i)(https?://)?www\.(\w+\.)+\w+(:[\d]+)?(/)?$

这句就可以匹配了,例子如下:

(http://)www.sina.com(/)
(http://)www.sina.com.cn(/)
(http://)www.sina.com.cn(:8001)(/)
(http://)www.sina.com(:8001)(/)
以上是能被匹配的,

类似(http://)www.sina.com/xxxxx这样的是不能匹配的,正和我意!
兔子-顾问 2010-11-06
  • 打赏
  • 举报
回复
很多正确答案了。楼主一个都没测试通过么?
逍遥散人 2010-11-06
  • 打赏
  • 举报
回复
感谢大家的热情帮助,想加分来着,系统不让加了,咋能加分啊!
逍遥散人 2010-11-06
  • 打赏
  • 举报
回复
严格说来,没有完全符合的,比较符合的是我最后写的那个正则,是我根据wuyazhe的那句修改而来的
逍遥散人 2010-11-05
  • 打赏
  • 举报
回复
如果域名编程www.sina.com.cn,那么匹配出来的就成了com.cn.......
damjmk2 2010-11-05
  • 打赏
  • 举报
回复

Regex reg = new Regex(@"^(https?://)?([a-zA-Z0-9_]+\.)+[a-zA-Z0-9_]+(:(([1-5][0-9]{4}|6[0-9]{3}[0-5])|[1-9][0-9]{0,3}))?/?$");
Console.WriteLine(reg.IsMatch("www.sina.com"));
Console.WriteLine(reg.IsMatch("www.sina.com:9999"));
Console.WriteLine(reg.IsMatch("www.sina.com:65535"));
Console.WriteLine(reg.IsMatch("http://www.sina.com:65535"));
Console.WriteLine(reg.IsMatch("sina.com"));

Console.WriteLine(reg.IsMatch("www.sina.com:65536"));
Console.WriteLine(reg.IsMatch("www.sina.com:9999/ad"));
Console.WriteLine(reg.IsMatch("www.sina.com/ad/index.dd"));
Console.WriteLine(reg.IsMatch("http://www.sina.com/ad/index.dd"));
//true
//true
//true
//true
//true

//false
//false
//false
//false


修改了一下端口,请大家完善
兔子-顾问 2010-11-05
  • 打赏
  • 举报
回复
try
^(https?://)?(\w+\.)+\w+$
边城的刀声 2010-11-05
  • 打赏
  • 举报
回复
判断商品 - >判断端口
边城的刀声 2010-11-05
  • 打赏
  • 举报
回复
写程序不用这么死吧,判断商品判断还是用程序判断更好,没必要钻牛角
边城的刀声 2010-11-05
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 damjmk2 的回复:]

引用 6 楼 bclz_vs 的回复:
更正下:
^(https?://)?(www\.)?[\w]+\.[\w]+(:[\d]+)?(/[\w]+\.[\w]+|/)?$


这样写光端口数就不匹配
端口 1-65535
[/Quote]
那你把[\d]改一下吧,让它符合实际数
damjmk2 2010-11-05
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 bclz_vs 的回复:]
更正下:
^(https?://)?(www\.)?[\w]+\.[\w]+(:[\d]+)?(/[\w]+\.[\w]+|/)?$
[/Quote]

这样写光端口数就不匹配
端口 1-65535
边城的刀声 2010-11-05
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 hch126163 的回复:]

var partten=/^(https?://)?[^/]+\.[^/]+/?$/;
partten.test("http://www.sina.com");
partten.test("https://www.sina.com");
partten.test("www.sina.com");
partten.test("http://www.sina.com:9999");……
[/Quote]
2、只匹配顶级域名和www开头的域名;
所以。。。
hch126163 2010-11-05
  • 打赏
  • 举报
回复
var partten=/^(https?:\/\/)?[^/]+\.[^\/]+\/?$/;
partten.test("http://www.sina.com");
partten.test("https://www.sina.com");
partten.test("www.sina.com");
partten.test("http://www.sina.com:9999");
partten.test("http://www.sina.com/");
partten.test("sina.com");

partten.test("sina.com/ad");
partten.test("http://sina");
边城的刀声 2010-11-05
  • 打赏
  • 举报
回复
更正下:
^(https?://)?(www\.)?[\w]+\.[\w]+(:[\d]+)?(/[\w]+\.[\w]+|/)?$
hch126163 2010-11-05
  • 打赏
  • 举报
回复
var partten=/^(https?://)?[^/]+\.[^/]+/?$/;
partten.test("http://www.sina.com");
partten.test("https://www.sina.com");
partten.test("www.sina.com");
partten.test("http://www.sina.com:9999");
partten.test("http://www.sina.com/");
partten.test("sina.com");

partten.test("sina.com/ad");//false
partten.test("http://sina");//false
不懂装懂 2010-11-05
  • 打赏
  • 举报
回复
^(http(s)?://)?((www\.)|(ad\.))?\w+\.((com)|(org)|(cn)|(net))(:9999)?((/)?|(/(index)|(default)\.\w+)|(/ad(/index\.\w+)?))$
边城的刀声 2010-11-05
  • 打赏
  • 举报
回复
^(https?://)?(www\.)?[\w]+\.[\w]+(:[\d]+)?(/|/[\w]+\.[\w]+)
q107770540 2010-11-05
  • 打赏
  • 举报
回复
标记一下 看 看
freefei 2010-11-05
  • 打赏
  • 举报
回复
解析字符串正则应该是最好的选择了。
加载更多回复(3)

110,571

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧