Добавить еще одно регулярное выражение в существующее - PullRequest
0 голосов
/ 12 февраля 2019

У меня есть 2 следующих шаблона:

https://codepen.io/anon/pen/OdZaBe

 /^(?=.*[A-Za-z])(?=.*\d)(?=.*[!#$%\-_=+<>])[A-Za-z\d!#$%\-_=+<>]/;

https://codepen.io/anon/pen/ErLOOw

/^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d!#$%\-_=+<>]/

для шаблона 1 требуется буква / цифра / специальный символи шаблон 2 - просто число и символ.

Я хотел бы добавить к этому шаблон, который отключает любые пробелы или полную строку пробелов: (?!\s*$)[\s\S]+$

Я пытался

/^(?=.*[A-Za-z])(?=.\S*$)(?=.*\d)[A-Za-z\d!#$%\-_=+<>]/;
/^(?=.*[A-Za-z])(?=.(?!\s*$)[\s\S]+$)(?=.*\d)[A-Za-z\d!#$%\-_=+<>]/;

, но это не сработало, как и ожидалось.

Конечным результатом будет

шаблон 1, требующий не менее 1 буквы / цифры / специального символа и не допускающий пробелов

для шаблона 2 требуется как минимум 1 цифра и символ и не должно быть пробелов

1 Ответ

0 голосов
/ 12 февраля 2019

Оба шаблона не совпадают с пробелами сами по себе.См. https://regex101.com/r/FaQhfD/1 и https://regex101.com/r/IWWhSp/1

Но в вашем коде вы должны повторить класс символов в конце, используя квантификатор, и подтвердить конец строки, не используя привязку $:

$scope.thing = /^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d!#$%\-_=+<>]+$/;

и:

$scope.thing = /^(?=.*[A-Za-z])(?=.*\d)(?=.*[!#$%\-_=+<>])[A-Za-z\d!#$%\-_=+<>]+$/;

Чтобы предотвратить ввод пробела в конце, вы можете использовать ng-trim="false", см. ngTrim :

<input type="text" ng-model="something" ng-pattern="thing" ng-trim="false" />

Пример обновленного codepens: update 1 и update 2

...