【问题标题】:valid regular regular expression string有效的正则表达式字符串
【发布时间】:2017-03-01 07:15:18
【问题描述】:

您好,我有一个正则表达式,现在已经失败了。不知道什么在停止。

Regex regex = new Regex(@"^(([a-zA-Z]:)|(\\{2}\w+\\[\w- ]+[$])|(\\{2}\w+))(\\[\w-. ]*)*(.xml|.XML)$");

if (!regex.IsMatch(fuSource.PostedFile.FileName))
{
      Page.Validators.Add(new ValidatorHelper("Please select a valid Application XML input file."));
}

我传递的文件名是:

XX2 03-01-2017.xml

但由于某种原因它没有服用。

请提供与模式匹配的有效文件名..

【问题讨论】:

  • 能否提供输入文件名的格式?
  • 到底发生了什么?您的正则表达式匹配 c:\XX2 03-01-2017.xml\\c\XX2 03-01-2017.xml
  • 这是我的输入“XX2 03-01-2017.xml”
  • 错误正在触发。我正在从本地驱动器中选择一个文件,文件名为“XX2 03-01-2017.xml”。我认为文件名与模式不符。
  • 当然,它没有。文件名有什么要求?试试^(?:(?:[a-zA-Z]:|\\{2}\w+\\[\w -]+[$]|\\{2}\w+)\\)?[\w. -]*\.(?:xml|XML)$,但我认为它可能没有达到您的预期。

标签: .net regex validation-controls


【解决方案1】:

您可以在这样的在线工具上测试您的正则表达式,然后自己尝试一下:
https://regex101.com/r/UX9TjE/1

基本上你的正则表达式匹配文件名中的 3 个部分:

  • 前缀:可以是3个东西
    • 类似 Windows 的驱动器名称:c:Z:
    • 带有参数的 Windows 共享驱动器:\\shared\user$
    • Windows 共享驱动器:\\shared
  • 名称(注意:可以为空,即零长度):
    • 包含文件路径,使用反斜杠,可以有空格:
    • \my\path\my file
  • 扩展名:.xml.XML

恕我直言,这个正则表达式不是很好,这里有一些匹配示例:

c:\path\\XX2 03-01-2017.xml

\\nas\user$\XX2 03-01-2017.xml

\\network_shared\.xml

\\a.XML

你可以在这里看到为什么每一个都匹配:
https://regex101.com/r/UX9TjE/2

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-15
    • 1970-01-01
    • 2016-02-09
    • 1970-01-01
    相关资源
    最近更新 更多