首页 > 解决方案 > 创建强密码错误

问题描述

我在黑客地球上做这个问题,(可以忽略这个问题)

基本上在下面的代码片段中

function minimumNumber(n, password) {
   const mapStrength = {
       numberProp: false,
       lowerCase: false, 
       upperCase: false,
       specialChar: false
   }
// Number of characters less than 6, add those many characters to reach 6 -> The buffer characters
    let charRequeiredToMakePasswordStrong = 0
    let bufferLength = (6-n) > 0 ? 6-n : 0 
    
    console.log(`This is buffer:`,  bufferLength)
    // Split password and itt
    password.split('').forEach(character => {
        // Checking if character is number
        if (Number.isInteger(character) && !mapStrength.numberProp) mapStrength.numberProp = true
        // Checking if character is
    
        if (character.match(/[^a-zA-Z]/) && (character === character.toLowerCase()) && !mapStrength.lowerCase) mapStrength.lowerCase = true
        if (character.match(/[^a-zA-Z]/) && (character === character.toUpperCase()) && !mapStrength.upperCase) mapStrength.upperCase = true
        if (character.toLowerCase() === character.toUpperCase()) mapStrength.specialChar = true 

    })
    console.log(mapStrength)

        // Calculating Number of false
    Object.values(mapStrength).forEach(charge => {
        if (!charge) charRequeiredToMakePasswordStrong += 1
    })

         console.log(charRequeiredToMakePasswordStrong, bufferLength)
      if (bufferLength > charRequeiredToMakePasswordStrong) return bufferLength
      if (charRequeiredToMakePasswordStrong > bufferLength) return charRequeiredToMakePasswordStrong
      return bufferLength

}

minimumNumber(3, 'zss');

为什么我的 mapStrength.lowerCase 是假的?在这一行中,我虽然设置为 true?

 if (character.match(/[^a-zA-Z]/) && (character === character.toLowerCase()) && !mapStrength.lowerCase) mapStrength.lowerCase = true

标签: javascript

解决方案


通过您的测试:

if (character.match(/[^a-zA-Z]/) && (character === character.toLowerCase()) && !mapStrength.lowerCase) {
  mapStrength.lowerCase = true
}

第一个条件仅适用于 if character.match(/[^a-zA-Z]/)- 换句话说,如果不是character按字母顺序排列的。匹配任何不是字符集中以下字符之一的字符。改为使用(与 相同,只是重复性较低):[^/[a-z]/i[a-zA-Z]

function minimumNumber(n, password) {
   const mapStrength = {
       numberProp: false,
       lowerCase: false, 
       upperCase: false,
       specialChar: false
   }
// Number of characters less than 6, add those many characters to reach 6 -> The buffer characters
    let charRequeiredToMakePasswordStrong = 0
    let bufferLength = (6-n) > 0 ? 6-n : 0 
    
    console.log(`This is buffer:`,  bufferLength)
    // Split password and itt
    password.split('').forEach(character => {
        // Checking if character is number
        if (Number.isInteger(character) && !mapStrength.numberProp) mapStrength.numberProp = true
        // Checking if character is
    
        if (character.match(/[a-z]/i) && (character === character.toLowerCase()) && !mapStrength.lowerCase) mapStrength.lowerCase = true
        if (character.match(/[a-z]/i) && (character === character.toUpperCase()) && !mapStrength.upperCase) mapStrength.upperCase = true
        if (character.toLowerCase() === character.toUpperCase()) mapStrength.specialChar = true 

    })
    console.log(mapStrength)

        // Calculating Number of false
    Object.values(mapStrength).forEach(charge => {
        if (!charge) charRequeiredToMakePasswordStrong += 1
    })

         console.log(charRequeiredToMakePasswordStrong, bufferLength)
      if (bufferLength > charRequeiredToMakePasswordStrong) return bufferLength
      if (charRequeiredToMakePasswordStrong > bufferLength) return charRequeiredToMakePasswordStrong
      return bufferLength

}

minimumNumber(3, 'zss');
minimumNumber(3, 'zsS');

您可以通过仅使用分配给的单个条件来使代码更具可读性mapStrength.lowerCase

if (character.match(/[a-z]/)) {
  mapStrength.lowerCase = true;
}
if (character.match(/[A-Z]/)) {
  mapStrength.upperCase = true;
}

function minimumNumber(n, password) {
   const mapStrength = {
       numberProp: false,
       lowerCase: false, 
       upperCase: false,
       specialChar: false
   }
// Number of characters less than 6, add those many characters to reach 6 -> The buffer characters
    let charRequeiredToMakePasswordStrong = 0
    let bufferLength = (6-n) > 0 ? 6-n : 0 
    
    console.log(`This is buffer:`,  bufferLength)
    // Split password and itt
    password.split('').forEach(character => {
        // Checking if character is number
        if (Number.isInteger(character) && !mapStrength.numberProp) mapStrength.numberProp = true
        // Checking if character is
        if (character.match(/[a-z]/)) {
          mapStrength.lowerCase = true;
        }
        if (character.match(/[A-Z]/)) {
          mapStrength.upperCase = true;
        }
        if (character.toLowerCase() === character.toUpperCase()) mapStrength.specialChar = true 

    })
    console.log(mapStrength)

        // Calculating Number of false
    Object.values(mapStrength).forEach(charge => {
        if (!charge) charRequeiredToMakePasswordStrong += 1
    })

         console.log(charRequeiredToMakePasswordStrong, bufferLength)
      if (bufferLength > charRequeiredToMakePasswordStrong) return bufferLength
      if (charRequeiredToMakePasswordStrong > bufferLength) return charRequeiredToMakePasswordStrong
      return bufferLength

}

minimumNumber(3, 'zss');
minimumNumber(3, 'zsS');


推荐阅读