Запретить использование специальных символов в строке [дубликаты]

avatar
Vadim
8 апреля 2018 в 03:51
367
1
0

У меня есть это регулярное выражение, и мне нужно, чтобы пароль не содержал ни один из этих символов: !@#$%^&*()_, он работает для !@#$%, но не для этого пароля !@#$%D.

$scope.matchPatternPassword = new RegExp("[^!@#$%^&*()_]$");
Источник
Marcos Casagrande
8 апреля 2018 в 03:57
0

Прочитал 5 раз и не могу понять, о чем вы спрашиваете. Можете ли вы опубликовать больше кода или попытаться сформулировать его лучше (это переводчик Google, становится все хуже)

Vadim
8 апреля 2018 в 04:02
0

@MarcosCasagrande вот тестовый сайт a0197766.xsph.ru с правильной формой если нажать на кнопку мой кабинет в пароле если написать !@#$% все работает но так !@#$%D не работает

Marcos Casagrande
8 апреля 2018 в 04:08
0

Хорошо, я понял, пароль не должен содержать ни одного из этих символов: [^!@#$%^&*()_]$, но !@#$%D работает, когда не должен: Другими словами: !@#$%D ПЛОХО, да?

Vadim
8 апреля 2018 в 04:10
0

@MarcosCasagrande, если в строке есть какие-либо из запрещенных символов, это означает ошибку, и пользователю необходимо удалить запрещенный символ.

Vadim
8 апреля 2018 в 04:16
0

Давайте продолжим это обсуждение в чате.

Ответы (1)

avatar
Marcos Casagrande
8 апреля 2018 в 04:11
2

Ваше регулярное выражение проверяло только любой из этих символов в конце строки, поэтому тот, который заканчивается буквой, работал.

Регулярное выражение должно быть:

$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)));
kamoroso94
8 апреля 2018 в 04:37
0

Почему вы использовали нежадный квантификатор +??

Marcos Casagrande
8 апреля 2018 в 04:40
0

Честно говоря, потому что регулярное выражение беспокоило меня, сопоставляя новую строку. (Перейдите к моей ссылке на регулярное выражение) и забыл удалить ее при публикации ответа здесь, поскольку его регулярное выражение не является многострочным.