Javascript (node.js) Generador de cadenas aleatorias específicas

Estoy buscando una manera eficiente de construir una cadena aleatoria que tenga requisitos específicos pero que pueda variar en longitud. Debe :

  • Contiene al menos un carácter en mayúscula.
  • Contiene al menos un carácter en minúscula.
  • Contener al menos un número.
  • Contiene al menos uno de los caracteres especiales: _- | @.,? /! ~ # $% ^ & * () {} [] + =

La cadena aleatoria no tiene que ser única, pero si lo es, es mejor. Se utilizará en un servidor node.js para que se pueda utilizar cualquier biblioteca criptográfica. Vi Math.random().toString(36) que se acerca pero no me da todo. No estoy seguro de si debería intentar construir una expresión regular para esto.

 var randomString = (function() { // Define character classes to pick from randomly. var uppers = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; var lowers = 'abcdefghijklmnopqrstuvwxyz'; var numbers = '0123456789'; var specials = '_-|@.,?/!~#$%^&*(){}[]+='; var charClasses = [uppers, lowers, numbers, specials]; var minLen = charClasses.length; function chooseRandom(x) { var i = Math.floor(Math.random() * x.length); return (typeof(x)==='string') ? x.substr(i,1) : x[i]; } // Define the function to actually generate a random string. return function(maxLen) { maxLen = (maxLen || 36); if (maxLen < minLen) { throw new Error('length must be >= ' + minLen); } do { // Append a random char from a random char class. var str='', usedClasses={}, charClass; while (str.length < maxLen) { charClass = chooseRandom(charClasses); usedClasses[charClass] = true; str += chooseRandom(charClass); } // Ensure we have picked from every char class. } while (Object.keys(usedClasses).length !== charClasses.length); return str; } })(); randomString(); // => "o4m3H@YC7j0r@^gsY@1vlg2]cI66|9^beZ1)" randomString(); // => "R6-K0Kq%4O0Je*=iPbVaV|bo-_,,g[j8wTW2" randomString(); // => "!uu5NUWs1P}SRN78l}32Gno$]2m5PV+h+wTG" 

Los Regex se usan para verificar, capturar, dividir o reemplazar algo en una cadena, no se puede construir algo desde cero con ellos.

Sin embargo, puede hacer algún reemplazo en una cadena que contenga un número aleatorio generado para que tenga lo que desea.

Intereting Posts