У меня есть это регулярное выражение, и мне нужно, чтобы пароль не содержал ни один из этих символов: !@#$%^&*()_
, он работает для !@#$%
, но не для этого пароля !@#$%D
.
$scope.matchPatternPassword = new RegExp("[^!@#$%^&*()_]$");
У меня есть это регулярное выражение, и мне нужно, чтобы пароль не содержал ни один из этих символов: !@#$%^&*()_
, он работает для !@#$%
, но не для этого пароля !@#$%D
.
$scope.matchPatternPassword = new RegExp("[^!@#$%^&*()_]$");
Ваше регулярное выражение проверяло только любой из этих символов в конце строки, поэтому тот, который заканчивается буквой, работал.
Регулярное выражение должно быть:
$scope.matchPatternPassword = /^[^!@#$%^&*()_]+$/;
Это соответствует любой строке, в которой нет ни одного из этих символов.
Вот рабочий пример: https://regexr.com/3nh9f
const regex = /^[^!@#$%^&*()_]+$/;
const passwords = [
'!@#$%',
'!@#$%D',
'yes',
'valid-password',
'im-valid-too',
'invalid$',
'super!-invalid',
'mypassword'
];
console.log(passwords.filter(password => regex.test(password)));
Почему вы использовали нежадный квантификатор +?
?
Честно говоря, потому что регулярное выражение беспокоило меня, сопоставляя новую строку. (Перейдите к моей ссылке на регулярное выражение) и забыл удалить ее при публикации ответа здесь, поскольку его регулярное выражение не является многострочным.
Прочитал 5 раз и не могу понять, о чем вы спрашиваете. Можете ли вы опубликовать больше кода или попытаться сформулировать его лучше (это переводчик Google, становится все хуже)
@MarcosCasagrande вот тестовый сайт a0197766.xsph.ru с правильной формой если нажать на кнопку мой кабинет в пароле если написать !@#$% все работает но так !@#$%D не работает
Хорошо, я понял, пароль не должен содержать ни одного из этих символов: [^!@#$%^&*()_]$, но
!@#$%D
работает, когда не должен: Другими словами:!@#$%D
ПЛОХО, да?@MarcosCasagrande, если в строке есть какие-либо из запрещенных символов, это означает ошибку, и пользователю необходимо удалить запрещенный символ.
Давайте продолжим это обсуждение в чате.