Validate A-Z0-9 имеет максимальную длину 10, но позволяет пользователю вводить пробелы (но максимально пропускать пробелы)

Мне интересно, есть ли простой способ установить эту проверку в текстовом поле формы без создания пользовательской директивы.

Мне нужно подтвердить, что {minlength: 2, maxlength: 10} пользователь может ввести любую комбинацию [A-Z0-9\s], но только количество A-Z0-9 будет идти на минимальное и максимальное количество.

Это возможно?

Я думал, что, возможно, с помощью ng-pattern и какого-нибудь магического регулярного выражения это удастся. Просто нужно одно сообщение об ошибке для запуска, если ng-шаблон не соответствует совпадению.


person ngDeveloper    schedule 15.06.2015    source источник


Ответы (1)


Регулярное выражение ^\s*(?:[A-Z0-9]\s*){2,10}$ даст то, что вы просите. Он распадается как:

^\s*                            - start with 0 or more white space characters
       [A-Z0-9]                 - then one of A-Z or 0-9
               \s*              - then any number of additional 
                                  white space chars (including 0)
    (?:           ){2,10}       - repeat all that 2-10 times
                         \s*$   - and allow trailing white space

Изменить: Обновлено для использования групп без захвата (я не знал, что они ngPattern поддерживаются).

person DocMax    schedule 15.06.2015
comment
Действительно ли шаблоны должны быть закреплены? Я думал, что это неявно. - person Bergi; 16.06.2015
comment
Потрясающе, спасибо! Вы действительно хорошо разбираетесь в регулярных выражениях, как вы научились? Кажется, работает и без начального \s* (возможно, потому, что angular автоматически обрезает пробелы). Есть ли способ изменить это, чтобы разрешить любой символ, включая знаки препинания и пробелы, но считать только буквы и цифры? - person ngDeveloper; 16.06.2015
comment
@ngDeveloper, действительно, обрезка пробелов делает устранение необходимости в ведущем \s*. Вы должны иметь возможность разрешить любой символ, заменив \s* на [^A-Z0-9]* везде (включая начальный), хотя я не проверял это. - person DocMax; 16.06.2015