首页 > 解决方案 > 如何使用替换函数 javascript 生成随机数?

问题描述

我是 javascript 新手,我需要使用替换生成随机数,我可以尝试

function generateUUID() {
    var dt = new Date().getTime()
    var uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace('/[xy]/g', function (c) {
        var r = (dt + Math.random() * 16) % 16 | 0
        dt = Math.floor(dt / 16)
        return (c == 'x' ? r : (r & 0x3 | 0x8)).toString(16)
    })
    return uuid
}

这个函数总是返回xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx 我错过了什么?

标签: javascriptreplace

解决方案


您在替换函数中使用字符串而不是正则表达式,这应该是一个简单的修复,例如只需更改

.replace('/[xy]/g',

.replace(/[xy]/g,

function generateUUID() {
    var dt = new Date().getTime()
    var uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
        var r = (dt + Math.random() * 16) % 16 | 0
        dt = Math.floor(dt / 16)
        return (c == 'x' ? r : (r & 0x3 | 0x8)).toString(16)
    })
    console.log("uuid",uuid)
    return uuid
}

console.log(generateUUID())

我还建议为此目的查看第三方库,例如uuid,它使用加密强的随机值。

function generateUUID() {
    return uuid.v4();
}
console.log(generateUUID());
<script src="https://cdnjs.cloudflare.com/ajax/libs/uuid/8.3.2/uuid.min.js" integrity="sha512-UNM1njAgOFUa74Z0bADwAq8gbTcqZC8Ej4xPSzpnh0l6KMevwvkBvbldF9uR++qKeJ+MOZHRjV1HZjoRvjDfNQ==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>


推荐阅读