我需要知道字符串在字符串的任何一点是否包含一个字符(一次或多次)。 例如,使用字符“&”:
“& hfds”无效,“%$ /& h&”无效等。
我这样做是密码验证的一部分:
function applySpecialCharacterFilter(password) {
if (password.match(/([!,%,@,#,$,^,*,?,_,~])/)) {
return 1;
} else if(password.match(/([&])/)) {
throw new Error('Das Passwort enthält unerlaubte Zeichen.');
}
return 0;
}
在第一部分中,它检查密码是否包含任何允许的字符,然后增加验证的值。但是,包含不允许的字符的密码可以通过。 如果我试图抓住它,使用else,但只有当它不在像$%&
这样的特殊字符序列中时才有效谢谢
编辑:
这是整个功能:
function checkStrength(password){
var strength = 0;
var passwordMessage = $('#passwordMessage');
if (password.length == 0) {
result.removeClass();
return '';
}
if (password.length < 6) {
validPassword = false;
result.removeClass();
result.addClass('short');
return 'Too short';
} else if(password.length > 8) {
validPassword = false;
result.removeClass();
result.addClass('short');
return 'Too long';
} else {
strength += 1;
}
try {
strength += applyLowerAndUpperCaseFilter(password);
strength += applyNumbersAndCharactersFilter(password);
strength += applySpecialCharacterFilter(password);
strength += applyTwoSpecialCharacterFilter(password);
strength += applyAlphabeticalCharacterCriteria(password);
} catch(error) {
validPassword = false;
result.removeClass();
result.addClass('short');
passwordMessage.html('').append('<p>TPassword contains invalid characters!</p>');
return 'Invalid';
}
passwordMessage.html('');
if (strength <= 2) {
validPassword = false;
result.removeClass();
result.addClass('weak');
return 'Schwach';
} else if (strength <= 3 ) {
validPassword = true;
result.removeClass();
result.addClass('good');
return 'Good';
} else {
validPassword = true;
result.removeClass();
result.addClass('strong');
return 'Strong';
}
}
function applyLowerAndUpperCaseFilter(password) {
if (password.match(/([a-z].*[A-Z])|([A-Z].*[a-z])/))
return 1;
return 0;
}
function applyNumbersAndCharactersFilter(password) {
if (password.match(/([a-zA-Z])/) && password.match(/([0-9])/))
return 1;
return 0;
}
function applySpecialCharacterFilter(password) {
if (password.match(/^([!%@#$^*?_~]+)$/)) {
return 1;
} else if(password.match(/([&])/)) {
throw new Error('Das Passwort enthält unerlaubte Zeichen.');
}
return 0;
}
function applyTwoSpecialCharacterFilter(password) {
if (password.match(/(.*[!,%,@,#,$,^,*,?,_,~].*[!,",%,@,#,$,^,*,?,_,~])/))
return 1;
else if(password.match(/([&])/))
throw new Error('Das Passwort enthält unerlaubte Zeichen.');
return 0;
}
function applyAlphabeticalCharacterCriteria(password) {
var quality = 0;
var sequences = [
'abcdefghijklmnopqrstuvwxyz',
'01234567890',
'!\"§$%/()=?'
];
var proceed = true;
for(var i=0; i<(password.length-3); i++) {
for(var index = 0; index < sequences.length; index++) {
var needle = password.substring(i, 3);
if(stripos(sequences[index], needle) != false) {
quality -= 1;
proceed = false;
}
if(proceed == false) break;
}
if(proceed == false) break;
}
return quality;
}
function stripos(f_haystack, f_needle, f_offset) {
var haystack = (f_haystack + '')
.toLowerCase();
var needle = (f_needle + '')
.toLowerCase();
var index = 0;
if ((index = haystack.indexOf(needle, f_offset)) !== -1) {
return index;
}
return false;
}
消息和类仅用于实时验证输出。
规则:
密码长度必须介于6到8个字符之间
它必须至少有1个大写和1个小写字符
它必须有数字
它必须有1个特殊字符(2给出更多价值)
只允许这些特殊字符 - _。 :,; ! @§$%/ =? #
如果可能,字符不应出现在序列中,因此不能使用abc,123,!§$ etc。
答案 0 :(得分:0)
你必须锚定第一个正则表达式并添加一个量词:
if (password.match(/^([!,%,@,#,$,^,*,?,_,~]+)$/)) {
// here ^ ^ ^
除非您想要匹配,否则逗号不是强制性的:
if (password.match(/^([!%@#$^*?_~]+)$/)) {
答案 1 :(得分:0)
您可以使用indexOf方法:
function applySpecialCharacterFilter(password) {
if (password.indexOf('&')>-1) {
throw new Error('Das Passwort enthält unerlaubte Zeichen.');
}
if (password.match(/^([!,%,@,#,$,^,*,?,_,~]+)$/)) {
return 1;
}
return 0;
}
您需要根据@M42 answer
更改正则表达式