Regex не работает в аннотации регулярных выражений - PullRequest
1 голос
/ 27 марта 2020

Я применил проверку на стороне клиента, используя RegularExpression Аннотация в ViewModel.

Проверка: GroupName должна начинаться с TPDC_ или DMK_ по крайней мере еще с одной буквой

[Required(ErrorMessage = "Group Name is required")]
        [RegularExpression("^(TPDC_|DMK_)+", ErrorMessage = "Group Name should begin with TPDC_ or DMK_")]
        public string GroupName { get; set; }

Но используемое регулярное выражение не работает должным образом.

Ответы [ 2 ]

1 голос
/ 27 марта 2020

Если вы планируете сопоставить строку, которая начинается с TPDC или DMK, а затем имеет _, за которым следуют одна или несколько букв, вы можете использовать

^(TPDC|DMK)_[A-Za-z]+$

или, если после _ могут быть любые символы, но где-то должна присутствовать буква, вы можете использовать

^(TPDC|DMK)_[^A-Za-z]*[A-Za-z].*

См. regex demo # 1 и regex demo # 2 .

Подробности

  • ^ - начало строки
  • (TPDC|DMK) - либо TPDC, либо DMK
  • _ - подчеркивание
  • [A-Za-z]+ - 1+ ASCII-букв (\p{L}+ будет работать только на стороне сервера!)
  • [^A-Za-z]*[A-Za-z].* - любые 0 или более символов, кроме букв ASCII (\P{L}* - это Unicode-эквивалент [^A-Za-z]*, который будет работать только на стороне сервера), буква ASCII, а затем любые 0 или более символов, кроме символов разрыва строки, как как можно больше.
  • $ - конец строки.
1 голос
/ 27 марта 2020

Вам не нужно повторять группу с чередованием. Если вы хотите, чтобы следующая буква была AZ, вы можете добавить класс символов после нее. Подчеркивание может быть перенесено после закрытия группы.

^(?:TPDC|DMK)_[A-Z]

Пояснение

  • ^ Начало строки
  • (?: Неподтвержденная группа
    • TPDC|DMK Соответствие TPD C или DMK
  • ) Закрытие группы
  • _[A-Z] Соответствие подчеркиванию с последующим по символу AZ

Regex demo

Или если вы хотите разрешить любую букву на любом языке, вы можете использовать \p{L} вместо

^(?:TPDC|DMK)_\p{L}
...