Проверка пробелов в FluentValidation

Я использую FluentValidation и пытаюсь создать правило, которое выдает ошибку, если в строке есть пробел, то есть для имени пользователя.

Я просмотрел эти SO, но, похоже, они не работают. Я уверен, что мой синтаксис немного нарушен?

Что такое регулярное выражение для не пробелов и Не дефис и Что такое регулярное выражение для не пробела и не дефиса

RuleFor(m => m.UserName).NotEmpty().Length(3, 15).Matches(@"/^\S\z/");

or

RuleFor(m => m.UserName).NotEmpty().Length(3, 15).Matches(@"[^\s]");

Ни один из них, похоже, не работает. Другие правила не пусты и содержат от 3 до 15 символов.


person roadsunknown    schedule 11.03.2014    source источник


Ответы (4)


Просто немного изменив исходное правило
изменить Хорошо, удалив разделители, как было предложено.

RuleFor(m => m.UserName).NotEmpty().Length(3, 15).Matches(@"\A\S+\z");

Все, что он делает, это заставляет не пробелы во всей строке от начала до конца.

В качестве альтернативы, я думаю, вы могли бы объединить их в 1 совпадение, как в

RuleFor(m => m.UserName).Matches(@"\A\S{3,15}\z");
person Community    schedule 11.03.2014
comment
Это работает, за исключением / и \, окружающих выражение. Удалите их, и любой из них работает. Если вы хотите обновить ответ, я могу отметить его как завершенный. Спасибо! RuleFor(m => m.ИмяПользователя).NotEmpty().Matches(@\A\S{3,15}\z); - person roadsunknown; 14.03.2014
comment
@roadsunknown - Готово! - person ; 14.03.2014
comment
RuleFor(m => m.UserName).NotEmpty().Matches(@"\A\S{3,15}\z"); у меня не сработало. Он показывает проверку даже при вводе любых символов - person Anmol Rathod; 29.06.2018
comment
@AnmolRathod - RuleFor(m => m.UserName).NotEmpty().Matches(@"\A\S{3,15}\z"); not worked for me. It is showing validating even also when i am entering any characters Это -> \A является абсолютным началом строки. \z — абсолютный конец строки \S{3,15} — от 3 до 15 любой символ, кроме пробела. А вот и у тебя.. - person ; 03.07.2018
comment
@sln, что будет окончательным регулярным выражением, чем ? - person Anmol Rathod; 04.07.2018
comment
@AnmolRathod — последнее регулярное выражение было опубликовано 14 марта 2014 г. - person ; 04.07.2018

Попробуйте char.IsWhiteSpace

RuleFor(m => m.UserName).NotEmpty().Length(3, 15).Must(userName => !userName.All(c => char.IsWhiteSpace(c)))
person Blast_dan    schedule 11.03.2014
comment
Не удалось заставить это работать. Также может быть производительность при использовании LINQ для проверки каждого символа по сравнению с подходом Regex. - person roadsunknown; 14.03.2014

У меня это сработало с FluentValidation.MVC5 6.4.0.

RuleFor(x => x.username).Must(u => !u.Any(x => Char.IsWhiteSpace(x)));
person Artur Kędzior    schedule 04.05.2017

Попробуй это:

RuleFor(m => m.UserName).NotEmpty().Length(3, 15).Must (u => !string.IsNullOrWhiteSpace(u));
person Community    schedule 11.03.2014
comment
Это не работает. Я все еще могу поставить пробел. - person Artur Kędzior; 04.05.2017