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 相同,它从数组中获取一个随机数并将其存储在变量中,然后将该数字作为值存储在哈希映射中。
任何帮助和改进将不胜感激。谢谢!
也许这个正则表达式适合你:
/[ `!@#$%^&*()_+-=[]{};':"\|,.<>/?~]/
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">
将两者结合起来,您的问题就会得到解决。