使用 hashmap 检查新数组是否包含特殊字符

问题描述 投票:0回答:1

JavaScript 编程新手。所以我会把这篇文章写得很短供您阅读,这样您就不会浪费时间。

尝试获取密码生成器的支票。

const chars = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z",
    "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,"!", "@", "#", "$", "%" ]
const specialChars = ["!", "@", "#", "$", "%"]
const nums = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
const genEl = document.getElementById("generate-el")
const inputEl = document.getElementById("input-el")
genEl.addEventListener("click", generate);
let pass = [];

let randSpecialChars = specialChars[Math.floor(Math.random() * specialChars.length)]
let randNums = nums[Math.floor(Math.random() * nums.length)]

const table ={};
table['randSpecialChars'] = randSpecialChars;
table['randNums'] = randNums;

function generate(){
    for(let i=0; i<10 && i<chars.length; i++){
        pass[i] = chars[Math.floor(Math.random() * chars.length)];
        inputEl.value = pass.join('');
};

    for(let i=0; i<pass.length; i++){
        if(specialChars.includes(pass[i])){
            return
        }
        else if(nums.includes(pass[i])){
            return
        }
        else{
            if(pass.includes(table['randSpecialChars'])=== false){
            pass.pop();
            pass.push(table['randSpecialChars'])}
            else if(pass.includes(table['randNums']==false)){
            pass.pop();
            pass.push(table['randSpecialChars'])
            }
            
        }
    }
};

我的逻辑: 如果生成的密码不包含特殊字符,则从数组中弹出最后一个元素,然后从哈希图中推送随机特殊字符。

与 randNum 相同,它从数组中获取一个随机数并将其存储在变量中,然后将该数字作为值存储在哈希映射中。

任何帮助和改进将不胜感激。谢谢!

javascript arrays hashmap
1个回答
0
投票

也许这个正则表达式适合你:

/[ `!@#$%^&*()_+-=[]{};':"\|,.<>/?~]/

function checkForSpecialChars(password) {
    return /[ `!@#$%^&*()_+\-=\[\]{};':"\\|,.<>\/?~]/.test(password);
}
<input type="text" oninput="checkForSpecialChars(this.value) ? console.log('yup') : console.log('nope')">

现在,如果您有一段文本并且其中包含正则表达式,您可能想要替换其中的一个字符,但为什么是最后一个呢?为什么没有一个?

let specialCharacter = "."; //use yours instead, this is just a test

let context = document.getElementById("foo");

let value = foo.value;

let position = Math.random() * value.length;

foo.value = value.substring(0, position - 1) + specialCharacter + value.substring(position);
<input type="text" value="123456789" id="foo">

将两者结合起来,您的问题就会得到解决。

© www.soinside.com 2019 - 2024. All rights reserved.