*****************amadang,keystudio,过客等正则高手过来帮忙看看*******************

jimu8130 2007-07-26 03:00:12
以前请你们帮忙写的正则今天测试的时候突然发现一个小问题(也许当时提问题的时候没有想到)
1 既包括本地路径又包括非本机的路径(\\server\s或者\\username\sss)
var fileReg =/^((([a-zA-Z]:)\\)?|(\\\\(((((1?\d?\d)|(2[0-4]\d)|(25[0-5]))\.){3}((1?\d?\d)|(2[0-4]\d)|(25[0-4]))\\)|(\w+))))(\\?[^\\/:*?""<>|()\.]{1,255})+\\?$/;

2 仅仅只包括本地路径和相对路径(不包括非本机的)
var fileReg=/^(?!.*?\\\s+(?:\\|$))(?!.*?\s+(?:\\|$))(?:[a-zA-Z]:)?(?:\\(?!\s+)[^\\/:*?"<>|]{1,255})+\\?$/;
问题:这两个均能基本满足我的要求,但是现在通过测试发现几个问题
表达式1,如果是\\s不通过,但是\\ss通过(因为有可能用户设置机器名为s!)
表达式1,2当d:\都不通过,但是我希望两个表达式都能验证通过这个。
××注意××
请各位老大改动的时候尽量不要破坏已有的验证功能,并请能简单自测一下!
...全文
568 52 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
52 条回复
切换为时间正序
请发表友善的回复…
发表回复
jimu8130 2007-07-27
  • 打赏
  • 举报
回复
to wuyazhe:
小小的抱怨你一下,一开始我就说明了,请各位写的人简单的自己测试一下,可是你。。,回答别人的问题居然连续2次忽略了要求,而且最后依然写的是错误的。你的个性签名的确很对。

兔子-顾问 2007-07-27
  • 打赏
  • 举报
回复
^((([a-zA-Z]:)|(\\{2}((((1?\d{1,2})|(2[0-4]\d)|(25[0-5]))\.){3}((1?\d{1,2})|(2[0-4]\d)|(25[0-5]))))|(\\{2}[^\.\\]+?))(\\|$))(([^\\/:*?""<>|()]{1,255}\\?)+)?$
jimu8130 2007-07-27
  • 打赏
  • 举报
回复
to wuyaze:
c:\(无法通过验证,错误)\\s\s能通过(正确)\\16.16.16.16\(后面没有文件夹的话,不能通过,错误)
keystudio 2007-07-27
  • 打赏
  • 举报
回复
第一个
^((([a-zA-Z]:)\\)?|(\\\\(((((1?\d?\d)|(2[0-4]\d)|(25[0-5]))\.){3}((1?\d?\d)|(2[0-4]\d)|(25[0-4]))\\)|(\w*))))(\\?[^\\/:*?""<>|()\.]{1,255})+\\?$

兔子-顾问 2007-07-27
  • 打赏
  • 举报
回复
private void button1_Click(object sender, EventArgs e)
{
List<string> strSrcList = new List<string>();
strSrcList.Add(@"d:\\");
strSrcList.Add(@"\\server");
strSrcList.Add(@"\\s");
strSrcList.Add(@"\\192.168.0.1");
strSrcList.Add(@"\\256.125.125.123");//不通过
strSrcList.Add(@"");//空字符串,不通过
strSrcList.Add(@"\\修改了");//通过
strSrcList.Add(@"\\16.16.16.233\不能通过");//通过
strSrcList.Add(@"\\s\s");//通过
string strRegex = @"^(([a-zA-Z]:)|(\\{2}((((1?\d{1,2})|(2[0-4]\d)|(25[0-5]))\.){3}((1?\d{1,2})|(2[0-4]\d)|(25[0-5]))))|(\\{2}[^\.\\]+?)(\\|$))(([^\\/:*?""<>|()]{1,255}\\?)+)?$";
foreach (string strSrc in strSrcList)
{
Match res = Regex.Match(strSrc, strRegex);
if (res.Success)
{
MessageBox.Show(res.Value);
}
}
}

不用工具,我就上面的代码测试的,没你说的问题。
新建项目,windows application
添加一个按钮,双击后,吧上面代码复制进去。
jimu8130 2007-07-27
  • 打赏
  • 举报
回复
另外:
如果你改动的是表达式一,那么我也说过了是网络路径(通过机器名和ip地址来访问,不过应该要加上局域网)
jimu8130 2007-07-27
  • 打赏
  • 举报
回复
to wuyazhe:
不知道你说的关心转义字符从何说起,\\是你在本机访问其他机器要输入的
jimu8130 2007-07-27
  • 打赏
  • 举报
回复
to wuyazhe:
\\修改了,\\16.16.16.233\不能通过(错误)\\s\s不能通过(错误),什么都不输入也能通过(错误)
兔子-顾问 2007-07-27
  • 打赏
  • 举报
回复
我测试工具不用关心转义字符的。你测试如果需要,可能要用两个\\表示\
^(([a-zA-Z]:)|(\\{2}((((1?\d{1,2})|(2[0-4]\d)|(25[0-5]))\.){3}((1?\d{1,2})|(2[0-4]\d)|(25[0-5]))))|(\\{2}[^\.\\]+?)(\\|$))(([^\\/:*?""<>|()]{1,255}\\?)+)?$
godgreat 2007-07-27
  • 打赏
  • 举报
回复
帮你顶起来
jimu8130 2007-07-27
  • 打赏
  • 举报
回复
to 过客:
汗,我后来测试下又可以通过了,我用的是t-regex来测试的,c:应该不能通过。
兔子-顾问 2007-07-27
  • 打赏
  • 举报
回复
\\16.16.16.444.
用上面这个已经无法匹配到了
兔子-顾问 2007-07-27
  • 打赏
  • 举报
回复
上面的也通过了
\\server\\
用这个就可以去掉\\server\\这个匹配结果了


^(([a-zA-Z]:)|(\\{2}((((1?\d{1,2})|(2[0-4]\d)|(25[0-5]))\.){3}((1?\d{1,2})|(2[0-4]\d)|(25[0-5]))))|(\\{2}[^\.\]+?)(\\|$))(([^\\/:*?""<>|()]{1,255}\\?)+)?$
jimu8130 2007-07-27
  • 打赏
  • 举报
回复
to wuyazhe:
你上面说的应该是修改后的表达式一的改动吧?
”\\16.16.16.444.“能通过验证应该这个是错误吧,ip没有限制数字大小没有对地址进行验证
"\\\"也能通过而这个也是错误
-过客- 2007-07-27
  • 打赏
  • 举报
回复
不是吧,我在RegularExpressionValidator下测试,后面写的都符合你的要求啊

以下情况通不过
\,\\,\\s

以下情况通过
c:\,c:\s,c:\s\,\s,\s\

不过似乎多了一种可以通过的情况c:,这个是否可以通过,如是不通过,这样

^(?!.*?\\\s+(?:\\|$))(?!.*?\s+(?:\\|$))(?!(\\?|[a-zA-Z]:)$)(?:[a-zA-Z]:)?(?:\\(?!\s+)[^\\/:*?"<>|]{1,255})*\\?$
兔子-顾问 2007-07-27
  • 打赏
  • 举报
回复
^(([a-zA-Z]:)|(\\{2}((((1?\d{1,2})|(2[0-4]\d)|(25[0-5]))\.){3}((1?\d{1,2})|(2[0-4]\d)|(25[0-5]))))|(\\{2}[^\.]+?)(\\|$))(([^\\/:*?""<>|()]{1,255}\\?)+)?$

测试:
\\通过
jimu8130 2007-07-27
  • 打赏
  • 举报
回复
to 过客:
后面写的也出现了好多上面的不通过。
jimu8130 2007-07-27
  • 打赏
  • 举报
回复
to 过客:
昨天还和keystudio提到你了,呵呵,挺想念你的。回老家去了?难道是结婚?我同学一般回老家都是去结婚(非大假)

测试了一下,\,\c,\c\,c:\s,c:\s\都不能通过,老大回家一周也不能把谋生的本领放下这么多啊:)
-过客- 2007-07-27
  • 打赏
  • 举报
回复
\\ 不通过,\ 不通过,\s 通过,\s\通过,c:\通过,c:\s通过,c:\s\通过,多了斜杠也不能通过”!!!!!!!!!!!!
------------------------------------------------
哦,这样啊,那上面写的有点问题,这样改下

^(?!.*?\\\s+(?:\\|$))(?!.*?\s+(?:\\|$))(?!\\?$)(?:[a-zA-Z]:)?(?:\\(?!\s+)[^\\/:*?"<>|]{1,255})*\\?$
-过客- 2007-07-27
  • 打赏
  • 举报
回复
MS第二个是我写的,稍加改进,回家一周,时间长了没写正则,手有点生,楼主先测一下吧

^(?!.*?\\\s+(?:\\|$))(?!.*?\s+(?:\\|$))(?:[a-zA-Z]:)?(?!$)(?:\\(?!\s+)[^\\/:*?"<>|]{1,255})*\\?$

单独的一个“\”是否合法,如合法,用上面的,如不合法,用这个

^(?!.*?\\\s+(?:\\|$))(?!.*?\s+(?:\\|$))(?:[a-zA-Z]:)?(?!\\?$)(?:\\(?!\s+)[^\\/:*?"<>|]{1,255})*\\?$
加载更多回复(32)

62,242

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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