Валидатор шаблонов для нескольких последовательных пространств - PullRequest
0 голосов
/ 04 октября 2018

Моя цель - создать Angular Validator для запрета последовательных пробелов;

В настоящее время я использую Validators.pattern('^[a-zA-Z0-9]+( [a-zA-Z0-9]+)*$'), что решило проблему.Единственная проблема заключается в том, что он также запрещает специальные символы, которые мне не нужны.

  • text text не должно быть допустимым, потому что есть несколько последовательных пробелов
  • , валидатор должен такжеработает, если пробелы находятся в начале или конце строки
  • text α не должно вызывать событие ошибки, хотя α является специальным символом

Ответы [ 2 ]

0 голосов
/ 04 октября 2018

Вы можете использовать

Validators.pattern('\\s*\\S+(?: \\S+)*\\s*') // if at there can be 0 or more leading/trailing whitespaces
Validators.pattern('\\s?\\S+(?: \\S+)*\\s?') // if at there can be 1 or 0 leading/trailing whitespaces

Или, литеральный эквивалент регулярного выражения:

Validators.pattern(/^\s*\S+(?: \S+)*\s*$/) // if at there can be 0 or more leading/trailing whitespaces
Validators.pattern(/^\s?\S+(?: \S+)*\s?$/) // if at there can be 1 or 0  leading/trailing whitespaces

Это будет проанализировано как

  • ^ - началострока (неявно для строкового шаблона, она добавляется автоматически)
  • \s* - 0+ пробелов
  • \S+ - 1+ непробельных символов
  • (?: \S+)* - 0 или более повторений пробела, за которыми следуют 1+ непробельных символов
  • \s* - 0+ пробелов
  • $ - конец строки (неявно для строкового шаблона,оно добавляется автоматически).

Если вы разрешите пробелы между кусками, не являющимися пробелами, замените буквенное пространство на \s (или \\s) в шаблонах.

0 голосов
/ 04 октября 2018

Вы можете использовать \s*([^\s]+\s?)*\s* в качестве шаблона.

Это: 0 или более пробелов, за которыми следует ноль или более (один или несколько непробельных символов, затем до одного пробела), за которыми следует 0 илибольше пробелов.

См .: https://stackblitz.com/edit/angular-m1cgzk

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...