我有这个正则表达式,我需要阻止密码包含以下任何符号:!@#$%^&*()_
,它适用于!@#$%
但不适用于此密码!@#$%D
。
$scope.matchPatternPassword = new RegExp("[^!@#$%^&*()_]$");
答案 0 :(得分: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)));