我的函数目前生成一个由数字、大写和小写字母组成的随机字符串,我希望它只生成大写字母和数字。
/**
* generate random string
* @param {number} length
* @returns {string}
*/
static generateRandomString(length: number): string {
return Math.random()
.toString(36)
.replace(/[^a-zA-Z0-9]+/g, '')
.substr(0, length);
}
我想让它只生成大写字母和数字,我做了,但是没有用。
.replace(/[^A-Z0-9]+/g, '')
这真是个制造随机字符串的好方法。
这个... number#toString(36)
会让你得到从0到z的值,其中不包括大写字母。这里有一个方法可以解决这个问题,只需使用 string#toUpperCase
方法来将小写字母转换为大写字母。
/**
* generate random string
*/
function generateRandomString(length: number): string {
return Math.random()
.toString(36)
//.replace(/[^a-z0-9]+/g, '') // Regex isn't necessary here
.replace('.','') // There's only ever one non [a-z0-9] character in this
.toUpperCase()
.substr(0, length);
}
下面是另一种方法,它允许你适当地控制长度,并有助于确保随机字符更接近于真正的随机。注意这里不需要使用regex。
/**
* generate random string
*/
function generateRandomString(length:number): string {
return new Array(length)
.fill(0)
.map(() => Math.floor(Math.random() * 36).toString(36))
.join('')
.toUpperCase();
}