问题描述
我的任务是:
EventName 是一个字符串,代表两个对战的参与者 彼此。
我在想如何使用数据注释来做到这一点。到目前为止,我有这个:
[RegularExpression("^[^0-9]+$",ErrorMessage = "Name cannot contain numbers")]
[required,MinLength(10),MaxLength(150)]
我认为我应该只允许在这两个团队之间使用 1 个分隔符(“-”“:”或空格)。任何其他事情都不应该被允许。没有特殊字符,没有数字。
有人能指出我正确的方向吗?
还有谁知道足球队的名字可以有数字吗?
有点像 Villa1874 - Levski1914 ?
解决方法
要在团队名称中允许单个分隔符(:
、-
或单个空格,任何一个都可以用空格包围)和数字/下划线:
^\w+ *[ -:] *\w+$
说明:
-
^
在行首断言位置 -
\w+
匹配任何单词字符(等于 [a-zA-Z0-9_])(1 个或多个) -
*
匹配任何空格(0 个或多个) -
[ -:]
匹配列表中存在的单个字符 -
*
匹配任何空格(0 个或多个) -
\w+
匹配任何单词字符(等于 [a-zA-Z0-9_])(1 个或多个) -
^
断言行尾位置
测试:https://regex101.com/r/gBZDLE/6
如果您不想在团队名称中使用数字或下划线,您可以将 \w
替换为 [A-Za-z]
:
^[A-Za-z]+ *[ -:] *[A-Za-z]+$
测试:https://regex101.com/r/gBZDLE/7
以前的团队名称中不允许有空格。为此,您可能需要匹配 [A-Za-z]+(?: [A-Za-z]+)*
。这将匹配任何以字母字符开头并包含一个或多个由单个空格分隔的单词的名称(例如“Manchester”或“Manchester United”)。完整的正则表达式:
^[A-Za-z]+(?: [A-Za-z]+)* *[ -:] *[A-Za-z]+(?: [A-Za-z]+)*$
测试:https://regex101.com/r/gBZDLE/5
[A-Za-z]+(?: [A-Za-z]+)
的解释:
-
[A-Za-z]+
匹配单个字母字符(+
次或多次) -
(?: [A-Za-z]+)
非捕获组(?: )
,匹配单个空格[A-Za-z]+