Si vous ne souhaitez autoriser que certains caractères, vous pouvez également procéder de la manière suivante :
function randomString(length, chars) {
var result = '';
for (var i = length; i > 0; --i) result += chars[Math.floor(Math.random() * chars.length)];
return result;
}
var rString = randomString(32, '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ');
Voici une démonstration en jsfiddle : http://jsfiddle.net/wSQBx/
Une autre façon de procéder pourrait consister à utiliser une chaîne spéciale indiquant à la fonction les types de caractères à utiliser. Vous pourriez procéder de la manière suivante :
function randomString(length, chars) {
var mask = '';
if (chars.indexOf('a') > -1) mask += 'abcdefghijklmnopqrstuvwxyz';
if (chars.indexOf('A') > -1) mask += 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
if (chars.indexOf('#') > -1) mask += '0123456789';
if (chars.indexOf('!') > -1) mask += '~`!@#$%^&*()_+-={}[]:";\'<>?,./|\\';
var result = '';
for (var i = length; i > 0; --i) result += mask[Math.floor(Math.random() * mask.length)];
return result;
}
console.log(randomString(16, 'aA'));
console.log(randomString(32, '#aA'));
console.log(randomString(64, '#A!'));
Violon : http://jsfiddle.net/wSQBx/2/
Pour utiliser la méthode base36 décrite ci-dessous, vous pouvez également procéder de la manière suivante :
function randomString(length) {
return Math.round((Math.pow(36, length + 1) - Math.random() * Math.pow(36, length))).toString(36).slice(1);
}
29 votes
Le chemin le plus court ? S'agit-il d'une question de golf codé ?
6 votes
Haha, non ! Il ne s'agit pas d'un concours pour savoir qui peut emballer son code le plus serré. J'ai vu des solutions qui listent l'ensemble des caractères dans une chaîne, ce qui semble être du gaspillage. Je cherche juste quelque chose qui ne soit pas beaucoup plus long que nécessaire.
5 votes
@Pavel c'est ce qu'est le code golf....
2 votes
@Pavel stackoverflow.com/questions/1349404/
11 votes
La suppression de la redondance est une bonne pratique d'ingénierie, le golf du code consiste à écrire la plus petite quantité de code possible (ce qui implique souvent des variables à caractère unique, des effets de bord et d'autres mauvaises pratiques). Les deux sont similaires mais très distincts.
0 votes
Si vous utilisez
Lodash
oUnderscore
entonces stackoverflow.com/questions/1349404/