检查数据注释中的最后一个字符是否为连字符( - )

时间:2016-10-03 19:16:54

标签: c# regex asp.net-mvc data-annotations

如果输入的字符串在我的MVC模型的末尾没有连字符(-),我想要做的是抛出验证错误消息。

我需要为它创建一个自定义正则表达式。这是我到目前为止所做的,

[Required(ErrorMessage = "Username is required.")]
[Remote("CheckExistingUserName", "Home", HttpMethod = "POST", ErrorMessage = "Username already exists.")]
[RegularExpression("^(?:[a-zA-Z0-9]+\s?\-)+$", ErrorMessage = "Username is invalid.")]
public string UserName { get; set; }

任何帮助都将不胜感激。

感谢。

1 个答案:

答案 0 :(得分:0)

您的正则表达式^(?:[a-zA-Z0-9]+\s?\-)+$在每个字母数字块之后需要-

您需要将其放在小组之外,$旁边:

^(?:[a-zA-Z0-9]+\s?)+-$
                     ^

请参阅online demo

这样,您需要以-结束字符串,现在整个模式匹配:

  • ^ - 字符串的开头
  • (?:[a-zA-Z0-9]+\s?)+ - 1个或多个序列
    • [a-zA-Z0-9]+ - 一个或多个ASCII字母或数字
    • \s? - 1或0个空格
  • - - 连字符
  • $ - 字符串结束。

请注意,从正则表达式引擎的角度来看,更优化的模式将是

^[a-zA-Z0-9]+(?:\s[a-zA-Z0-9]+)*-$

因为它更线性。请参阅its demo