正则整合,大小写字母、数字、除空格以外的其他特殊字符,且满足三种以上

要求:
大小写字母、数字、除空格以外的其他特殊字符,且满足三种以上即可
/^(?![a-zA-Z]+$)(?![A-Z0-9]+$)(?![A-Z\W_]+$)(?![a-z0-9]+$)(?![a-z\W_]+$)(?![0-9\W_]+$)[a-zA-Z0-9\W_]{8,20}$/ && /^[^\s]*$/
目前用了两个正则校验,有谁能帮忙整合一下

验证一下整合就是2个规则中间加个|符号,但是太长了

<body>
    <div class="mydiv">
        <input id="myinput" type="text" onkeyup="check(this.value);">
        <div id="err" style="background-color: #ccc;  min-height: 30px;"></div>
    </div>
</body>
<script>
    /* 
        数字 小写 特殊
        数字 大写 特殊
        大 小写 数字 
        大 小写 特殊
    */
    let reg1 = /(?=.*\d)(?=.*[~!@#$%^&*()_+`\-\=<>?,:;\/'".\\\|[\]{}])((?=.*[a-z])|(?=.*[A-Z]))/
    let reg2 = /(?=.*[a-z])(?=.*[A-Z])((?=.*\d)|(?=.*[~!@#$%^&*()_+`\-\=<>?,:;\/'".\\\|[\]{}]))/
    let reg3 = /\s/g
    function check(value) {
        if (reg1.test(value) || reg2.test(value)) {
            document.getElementById("err").innerHTML= "正确";
        } else {
            document.getElementById("err").innerHTML= "错误";
        }
    }
</script>

?![a-zA-Z0-9\s]+$

说实话,用正则这么搞其实挺复杂的,可以参考我的文章

文盲的正则表达式入门,实战篇(欢迎提问,持续更新)_文盲的专栏-CSDN博客 之前写的文章文盲的正则表达式入门,个人认为写的还可以,但是网络上充斥着的同质化内容太多了,结果整整几年了,也没几个人看过,郁闷哦再有就是,虽然老顾推荐给了几个人看,但感觉小朋友们的正则水平提升的并不明显,也许读正则都费劲?那么,这次老顾就结合自己的正则入门来几个实战,来帮助新手入门正则吧。如何写出正则?正则的规则,各定义的意义已经在正则入门篇里讲过了,这边不再重复,那么如何写出正则呢?其实这就是把我们的思路改成正则的逻辑,就像汉语翻译成英语,日语翻译成汉语一样。你的思路越清晰,那么正则的规则 https://blog.csdn.net/superwfei/article/details/119022329?spm=1001.2014.3001.5502

密码复杂度验证