【问题标题】:Entity Framework Regular Expression with Slashes but without Commas带有斜线但不带逗号的实体框架正则表达式
【发布时间】:2013-05-29 03:57:52
【问题描述】:

我有一个实体框架模型,我已经对其进行了一些验证,特别是一个接受字母数字、空格和一些标点符号的正则表达式。但是,当尝试添加斜杠“/”作为可接受的字符时,它似乎允许一些额外的不可接受的字符(在本例中为逗号)。

表达式 1:

[RegularExpression(@"[\w\s.()&'-]+", ErrorMessage = "Contains an illegal character")]

这适用于除正斜杠之外的所有预期字符(即它不接受逗号,但也不接受斜杠)

表达式 2:

[RegularExpression(@"[\w\s.()&'-/]+", ErrorMessage = "Contains an illegal character")]

这现在接受斜杠(很好),但现在也接受逗号(不需要)

表达式 3:

[RegularExpression(@"[\w\s.()&'-\/]+", ErrorMessage = "Contains an illegal character")]

尝试转义正斜杠。效果与表达式 2 相同,接受斜杠和逗号

这只是我需要做的一些奇怪的转义或类似的技巧吗? .Net 正则表达式的一些副作用?我绝对认为“表达式 2”会接受斜杠,但不接受逗号,但事实似乎并非如此。

【问题讨论】:

    标签: .net regex entity-framework validation


    【解决方案1】:

    '-' 字符必须是字符类中的最后一个字符,如果不是,它定义了可接受的字符范围:[\w\s.()&'/-]+'

    【讨论】:

    • 天才!为什么这不会让我不止一次投票给你? ...非常感谢!
    【解决方案2】:

    这是因为破折号-。字符类中的破折号表示范围例如a-z0-9。 (这是一个不是字典顺序而是基于 ASCII 的范围。如果您查看 an ASCII table,您会看到逗号 , (44) 位于非定向撇号 ' (39) 和正斜杠 / (47)。)您需要将 - 作为字符类的第一个或最后一个字符,以免将其解释为范围。

    【讨论】:

      猜你喜欢
      • 2017-04-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多