Моя задача иметь:
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]+)*. Это будет соответствовать любому имени, которое начинается с буквенного символа и содержит одно или несколько слов, разделенных одинарными пробелами (например, «Манчестер» или «Манчестер Юнайтед»). Полное регулярное выражение:
^[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]+Я обновил ответ, чтобы разрешить любой из разделителей. Хотя я считаю, что ваша проблема говорит о том, что имя должно содержать имена двух участников, поэтому всегда должен присутствовать разделитель. Если вы хотите удалить разделитель и разрешить только буквенные символы, вы можете просто использовать: ^[A-Za-z]+$
Манчестер Юнайтед — Тоттенхэм ХотСпурт в этом случае не сработает. Моя идея заключалась только в одном знаке "-" и любых пробелах после первого слова (никогда в начале). Мне жаль, что я такой требовательный, но сейчас я так расстраиваюсь из-за регулярных выражений :<
Обновлен ответ, чтобы включить пробел между именами команд, но не позволяет начинать или заканчивать пробелом (в любом случае вы можете обрезать это позже, когда будете обрабатывать входное значение в своем коде). Это позволяет использовать один разделитель, который может быть окружен нулем или несколькими пробелами. Я бы рекомендовал вам продолжать играть с регулярным выражением, пока оно не удовлетворит ваши потребности.
Спасибо, но я хочу разрешить только одно тире или только один разделитель или ни одного.