正则表达式模型状态为false

时间:2013-12-02 08:36:01

标签: regex asp.net-mvc

我创建了以下正则表达式:

(^[%a-zA-Z][\w\-.]+)( [\w\-.]+|[\w\-.]+)([%A-Za-z.]$)

Regular expression visualization

应该允许的字符串,例如

test (working)
test test (working)
%test (working)
test% (working)
%test% (working)
% (not working)

我尝试了以下方法使%只能工作:

(%|(^[%a-zA-Z][\w\-.]+)( [\w\-.]+|[\w\-.]+)([%A-Za-z.]$))

Regular expression visualization

定义的模式适用于https://www.debuggex.com,但在我的应用程序中失败,模型看起来像:

[Display(Name = "Publisher")]
[RegularExpression(@"(%|(^[%a-zA-Z][\w\-.]+)( [\w\-.]+|[\w\-.]+)([%A-Za-z.]$))", ErrorMessage = "Invalid Expression!")]    
public string SoftwarePublisher { get; set; }

任何建议都会有所帮助。提前谢谢

2 个答案:

答案 0 :(得分:1)

这种模式应该比你的尝试更好,因为它适用于我:

<强>模式

(^|%)((\w+\s?)+)([^\s]$|%)|%

<强> INPUT

case 1:    test
case 2:    test
case 3:    %test
case 4:    test%
case 5:    %test%
case 6:    %

<强>输出

case 1:    matches
case 2:    matches
case 3:    matches
case 4:    matches
case 5:    matches
case 6:    matches

希望它对您有用或至少给您一些提示。如果您将在某个网站上对其进行测试,请在我使用^$时单独使用所有字符串。

答案 1 :(得分:0)

您正在使用的表达式将仅对小于4个字符的所有字符串测试为负数。第1组为2,第2组为1(第2组),第3组为1。

你可以检查这个以测试'tes'将失败,'%%%%'将通过(即使你从你的正则表达式中取%)。

如果您需要有关正则表达式的帮助,请告诉我们您要实现的目标。无论如何,建议首先用人类可读的语言写下你想要的正则表达式。

例如:

任何字符串:

  • 以3个字母开头

  • 一个可选的'_'