各位帮帮忙,关于文件路径的正则表达式

cityhunter172 2004-09-06 02:55:49
我寫了一段正則表達式,用於在客戶端判斷上傳的文件路徑,如下:

((\\\\([^:"*/?<>\\|]{1,})\\((?!\\\\)[^:"*/?<>|]){0,})|([a-zA-Z]{1}:\\((?!\\\\)[^:"*/?<>|]){0,}))[^\\]

前一段 ((\\\\([^:"*/?<>\\|]{1,})\\((?!\\\\)[^:"*/?<>|]){0,}) | ………
判斷諸如 “\\142.54\abc.txt”等網絡文件

後一段 …… | ([a-zA-Z]{1}:\\((?!\\\\)[^:"*/?<>|]){0,})) ……
判斷本地文件“E:\001”“D:\0\002.txt”等

最後的 …… [^\\] 控制不能以 “\”結束

整個表達式中的 “(?!\\\\) ”是指不能出現“\\”字符


現在的問題是“空格”不知道怎麼控制
因為文件名與路徑都充許空格,但不能全是空格
而上述正則表達式對於“D:\0\ \002.txt”則檢驗不出

各位有沒有好辦法?先謝過了!!
...全文
1329 27 打赏 收藏 转发到动态 举报
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
xxc1981 2004-09-24
  • 打赏
  • 举报
回复
比如下面这个文件名就可以匹配,不但有大量空格 有中文也没有问题.
\\df edf\s df\df 的d fd.txt
xxc1981 2004-09-24
  • 打赏
  • 举报
回复
我上次最后给你的那个是允许的.你是怎么用的? 怎么会不行呢?
string pat =@"^\\\\(?=[^ .])[^\\/"+"\""+@":*?<>|]+(?<=[^ .])\\(?=[^ .])[^\\/"+"\""+@":*?<>|]+(?<=[^ .])\\(?=[^ .])[^\\/"+"\""+@":*?<>|]+(?<=[^ .])$";
cityhunter172 2004-09-24
  • 打赏
  • 举报
回复
你的源碼把空格限制地太死了,
文件名與路徑都是充許空格的
cityhunter172 2004-09-24
  • 打赏
  • 举报
回复
TO:xxc1981(asf)
你的源碼我試過了,
极客行天下 2004-09-23
  • 打赏
  • 举报
回复
这样都行!佩服!!!
cyy1981 2004-09-23
  • 打赏
  • 举报
回复
study
xxc1981 2004-09-23
  • 打赏
  • 举报
回复
我有的的确是标准的C#正则表达式,javascprit的可能不行.
baointoo1980 2004-09-23
  • 打赏
  • 举报
回复
好像javascript中用不了(?<=)这种模式吧,我试着用过好几次都没成功。
xxc1981 2004-09-21
  • 打赏
  • 举报
回复
难道我给你的正则表达式不行吗? 经过测试是没有问题的啊!
注意那是C#代码.
chengjunlin55555 2004-09-20
  • 打赏
  • 举报
回复
study
ruixing123 2004-09-20
  • 打赏
  • 举报
回复
UP
Hunter 2004-09-20
  • 打赏
  • 举报
回复
學習, 關注.
cityhunter172 2004-09-20
  • 打赏
  • 举报
回复
沒人回答了嗎??
cityhunter172 2004-09-14
  • 打赏
  • 举报
回复
TO: begincsdn(XPRaise)
關於你的看法,我的解釋是:可以在客戶端驗証的,盡量用腳本先 驗証過濾 一遍。當然,服務端驗証也必不可少。
還有
var fso;
fso = new ActiveXObject("Scripting.FileSystemObject");

可以更準確得到所上傳的文件信息,但不足的地方是:如果安全設定過高,以上創建對象將失敗,所以我才會使用正則表達式驗証路徑

TO: xxc1981(asf)
感謝你的熱心回答,待我回去試一下
goody9807 2004-09-08
  • 打赏
  • 举报
回复
\s*
xxc1981 2004-09-08
  • 打赏
  • 举报
回复
但是从练习的角度来说,还是个不错的题目.
xxc1981 2004-09-08
  • 打赏
  • 举报
回复
对你第一个问题的完整正则表达式:(这里考虑是文件的开始和结束既不是空格也是是小数点.)

string pat =@"^\\\\(?=[^ .])[^\\/"+"\""+@":*?<>|]+(?<=[^ .])\\(?=[^ .])[^\\/"+"\""+@":*?<>|]+(?<=[^ .])\\(?=[^ .])[^\\/"+"\""+@":*?<>|]+(?<=[^ .])$";

以下是测试输入和结果.

\\DFDF\SADFASD\SDFD
True
\\DFDF\SADFASD\SDFD.TX
True
\\DFDF\SADFA SD\SDFD.T
True
\\DFD F\SADFA SD\SDFD.
True
\\DFD F\SADFA SD\SDFD.
False
\\DFD F\SADFA SD\.
False
\\DFD F\SADFA SD\
False
\\DFD F\SADFA \DFDF
False
\\DFD F\SAD???FA\DFDF
False
\\DFDF\SAD???FA\DFDF
False
\\DFDF\SAD"""FA\DFDF
False
\\DFDF\SAD"""FA\DFDF
yichuan1982 2004-09-08
  • 打赏
  • 举报
回复
我也觉得这种校验恐怕会出错
yichuan1982 2004-09-08
  • 打赏
  • 举报
回复
up
俞庆平 2004-09-08
  • 打赏
  • 举报
回复
事实上,你这个验证是没有太大意义的,如果你的目录是c:\a\b\c\d.txt是一个合法的文件路径,但并不存在这样的路径时仍然无效。
也就是仍然会出错。
所以这种检测过程让IO层负责好了。
事实上,如果按设计的角度来看,你来验证文件路径的有效性不符合设计的原则。
加载更多回复(7)

62,041

社区成员

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

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

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

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