2015-01-07 216 views
0

我需要知道字符串中是否包含任何字符(一次或多次)。 例如以字符 “& ”:如何检查字符串中是否包含字符javascript中的任何点

“ & hfds” 是无效的, “%$/&ħ&” 无效等

Im做此作为密码验证的一部分:

function applySpecialCharacterFilter(password) { 
    if (password.match(/([!,%,@,#,$,^,*,?,_,~])/)) { 
     return 1; 
    } else if(password.match(/([&])/)) { 
     throw new Error('Das Passwort enthält unerlaubte Zeichen.'); 
    } 
    return 0; 
} 

在第一部分中,它检查密码是否包含任何允许的字符,然后递增验证的值。但是包含不允许的字符的密码可以通过。 随着否则,如果即时通讯试图抓住它,但它仅适用,如果它不是像$%的特殊字符序列&

谢谢

编辑:

这里是全功能:

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', 
      '', 
      '!\"§$%/()=?' 
     ]; 

     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,第$等

+0

什么是无效的规则? –

+0

只有一个字符或多个字符? – giammin

回答

0

你必须锚定第一正则表达式,并添加一个量词:

if (password.match(/^([!,%,@,#,$,^,*,?,_,~]+)$/)) { 
//    here^     ^^ 

逗号是不是如果你想匹配它除了强制性:

if (password.match(/^([!%@#$^*?_~]+)$/)) { 
+0

这是做这项工作,但总体上改变了验证。虐待整个功能并解释更多。我希望它不要太多.. –

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

相关问题