You can create a function that ensures that your pwd contains at least one of a specific character set:
function ensurePwdContains(pwd, regexListOfChars, listOfChars) {
if (!regexListOfChars.test(pwd)) {
var newChar = listOfChars.charAt(Math.floor(Math.random() * listOfChars.length));
var pos = Math.floor(Math.random() * (pwd.length + 1));
pwd = pwd.slice(0, pos) + newChar + pwd.slice(pos);
}
return pwd;
}
, . , listOfChars, .
:
FinalPwd = ensurePwdContains(FinalPwd, /[!
FinalPwd = ensurePwdContains(FinalPwd, /[A-Z]/, "ABCDEFGHIJKLMNOPQRSTUWXYZ");
: http://jsfiddle.net/jfriend00/ur9FL/
. , , , ( , ). :
function generatePwd(minLen) {
function rand(max) {
return Math.floor(Math.random() * max);
}
function ensurePwdContains(pwd, regexListOfChars, listOfChars) {
if (!regexListOfChars.test(pwd)) {
var newChar = listOfChars.charAt(rand(listOfChars.length));
var pos = rand(pwd.length + 1);
pwd = pwd.slice(0, pos) + newChar + pwd.slice(pos);
}
return pwd;
}
var legalChars = "!#$@*123456789aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ";
var specialChars = "!#$@*";
var specialRegex = /[!#\$@*]/;
var caps = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
var capsRegex = /[A-Z]/;
var nums = "123456789";
var numRegex = /[1-9]/;
legalChars = legalChars.split("");
var pwd = "", len = minLen + rand(minLen), index;
len = Math.min(legalChars.length, len);
while (pwd.length < len) {
index = rand(legalChars.length);
pwd += legalChars[index];
legalChars.splice(index, 1);
}
pwd = ensurePwdContains(pwd, specialRegex, specialChars);
pwd = ensurePwdContains(pwd, capsRegex, caps);
pwd = ensurePwdContains(pwd, numRegex, nums);
return pwd;
}
, , , , : http://jsfiddle.net/jfriend00/7dReY/ p >
, , :
function putPasswordInPlace(pwdId, sBtnName) {
var pwd = generatePwd(8);
document.getElementById(pwdId).value = pwd;
EnableButton(sBtnName);
}