Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 检查数据批注中的最后一个字符是否为连字符(-)_C#_Regex_Asp.net Mvc_Data Annotations - Fatal编程技术网

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

C# 检查数据批注中的最后一个字符是否为连字符(-),c#,regex,asp.net-mvc,data-annotations,C#,Regex,Asp.net Mvc,Data Annotations,如果输入的字符串在MVC模型的末尾没有连字符(-),我要做的是抛出一条验证错误消息 我需要为它创建一个自定义正则表达式。这就是我到目前为止所做的 [Required(ErrorMessage = "Username is required.")] [Remote("CheckExistingUserName", "Home", HttpMethod = "POST", ErrorMessage = "Username already exists.")] [RegularExpression("

如果输入的字符串在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?)+
    -1个或多个
    • [a-zA-Z0-9]+
      -1个或多个ASCII字母或数字
    • \s?
      -1或0个空格
  • -
    -连字符
  • $
    -字符串结束
请注意,将使用更优化的模式(从正则表达式引擎的角度来看)


因为它更线性。看。

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