javascript - 创建强密码错误

标签 javascript

我正在这样做problem on hacker earth ,(可以忽略问题)

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

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

最佳答案

通过您的测试:

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

第一个条件仅适用于 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');

关于javascript - 创建强密码错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58044603/

相关文章:

javascript - angularjs 指令不起作用(奇怪的问题)

javascript - jQuery 不适用于附加数据

javascript - 在 javascript 中每 3 行插入换行符?

javascript - 如何用字体很棒的图标替换 dijit 树中的图标?

javascript - 根据值跳过数组中的每个第 n 个值

javascript - ShellHeadItem 的扩展(渲染?)

javascript - 将带有复选框的列动态添加到表单中的html表

javascript - .fadeIn() 和 .fadeOut() 的用法

javascript - 使用 javascript 的无限循环(Angular NgFor 和 http 请求)

javascript - 使用 Javascript 在 iframe 中导航 URL