【问题标题】:Check if last character is a hyphen (-) in data annotation检查数据注释中的最后一个字符是否为连字符 (-)
【发布时间】:2016-10-03 19:16:53
【问题描述】:

如果在我的 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; }

任何帮助将不胜感激。

谢谢。

【问题讨论】:

  • 这看起来很奇怪。但是为什么你不能把它添加到你的正则表达式的末尾呢? ^(?:[a-zA-Z0-9]+\s?)+\-$
  • 如果最后的连字符是某种秘密,我有坏消息要告诉你...
  • 您的模式应该是^(?:[a-zA-Z0-9]+\s?)+-$,而不是^(?:[a-zA-Z0-9]+\s?\-)+$。基本上,您可以使用^.*-$ 要求最后一个字符是连字符。您的正则表达式应满足哪些要求?
  • 你是对的。感谢您的帮助:-)

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


【解决方案1】:

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

你需要把它放在组外,在$旁边:

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

online demo

这样,您需要一个以- 结尾的字符串,并且整个模式现在匹配:

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

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

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

因为它更线性。见its demo

【讨论】:

    猜你喜欢
    • 2011-02-03
    • 2013-01-06
    • 2020-01-27
    • 2018-10-15
    • 1970-01-01
    • 1970-01-01
    • 2020-07-15
    • 2023-03-28
    • 1970-01-01
    相关资源
    最近更新 更多