2016-01-29 5 views
0

Я не так хорош в регулярном выражении, и вот моя проблема: мне нужно создать регулярное выражение со следующими критериями: Минимум 10 символов с прописными буквами, строчными буквами, хотя бы одним номером, по крайней мере одним специальным символом и не совпадает с именем пользователя.Angulejs regex pattern

и вот мое регулярное выражение /((?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[@#$%]).{10,50})/

и ниже моего HTML

<input ng-model="Form.Account.Username" name="AccountUsername" type="text" ng-focus ng-minlength=3 ng-maxlength=16 placeholder="Your Account Username" ng-blur="makeItDirty(Checkout.AccountUsername)" required ng-ensure-unique ng-pattern="/^[a-zA-Z0-9_-]{3,16}$/" /> <input ng-model="Form.Account.Password" name="AccountPassword" ng-focus type="password" ng-blur="makeItDirty(Checkout.AccountPassword)" required placeholder="Your Account Password" ng-pattern="/((?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[@#$%]).{10,50})/" />

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

ответ

0

Используйте подходящий инструмент для работы. Хотя регулярные выражения отлично подходят для первой части вашей проблемы (соблюдение определенного уровня сложности пароля); это страшное решение для второй части вашей проблемы. Не используйте регулярное выражение, когда простую .indexOf() выполнит эту работу. Я знаю, что приятно делать все в одном шаблоне/чеке, но ваш лучший вариант - разделить их на две проверки. Один запускается через регулярное выражение для обеспечения соблюдения правил пароля, а вторая проверка гарантирует, что их имя пользователя не является подстрокой пароля.