【问题标题】:Creating a regex for mongoose URI为 mongoose URI 创建正则表达式
【发布时间】:2014-08-01 01:14:59
【问题描述】:

我正在尝试弄清楚如何使用正则表达式验证 mongoose URI。我目前的正则表达式是这样的:

^(mongodb:\/{2})(\w*?):{0,1}(\w*?)@{0,1}(\w+?):(\d+)\/(\w+?)

我需要能够检测是否输入了用户名和密码,即

mongodb:username:password@localhost:27107/mydatabasename

所以我需要这些案例无效:

mongodb://username:localhost:27107/adfaeadf
mongodb://username:@localhost:27107/adfaeadf
mongodb://:password@localhost:27107/adfaeadf

但这些情况是否有效:

mongodb://:@localhost:27107/mydatabasename
mongodb://@localhost:27107/mydatabasename
mongodb://localhost:27107/mydatabasename
mongodb:username:password@localhost:27107/mydatabasename

任何帮助将不胜感激

【问题讨论】:

    标签: regex mongoose uri


    【解决方案1】:
    ^(mongodb:(?:\/{2})?)((\w+?):(\w+?)@|:?@?)(\w+?):(\d+)\/(\w+?)$
    

    http://regex101.com/r/mV2cR7/2解释

    对于您的最后一个链接,“mongodb:”之后是否应该有“//”?然而,正则表达式将匹配它。

    【讨论】:

    • 可能^(mongodb:(?:\/{2})?)((\w+?):(\w+?)@|:?@?)(\w+?)(:(\d+))?\/(\w+?)$ 与上述不匹配mongodb://localhost/mydb
    【解决方案2】:

    如果你想支持传递参数:

    /^mongodb:\/\/(?:(?:(\w+)?:(\w+)?@)|:?@?)((?:[\w.-])+)(?::(\d+))?(?:\/([\w-]+))?(?:\?([\w-]+=[\w-]+(?:&[\w-]+=[\w-]+)*)?)?$/
    

    【讨论】:

      【解决方案3】:

      这与格式为 server-a1.host.com 的服务器或副本集不匹配,请尝试:

      ^(mongodb:(?:\/{2})?)((\w+?):(\w+?)@|:?@?)(\S+?):(\d+)\/(\S+?)(\?replicaSet=(\S+?))?$

      此处解释:https://regex101.com/r/mV2cR7/47

      【讨论】:

        【解决方案4】:

        对于mongodb+srv for mongodb atlas urls。

        ^(mongodb?(\+srv):(?:\/{2})?)((\w+?):(\w+?)@|:?@?)(\w+?):(\d+)\/(\w+?)$
        

        【讨论】:

          【解决方案5】:

          如果您想在主机上支持多个分片并传递参数:

          /^mongodb:\/\/(?:(?:(\w+)?:(\w+)?@)|:?@?)(((?:[\w.-])+)(?::(\d+)),((?:[\w.-])+)(?::(\d+)),((?:[\w.-])+)(?::(\d+)))?(?:\/([\w-]+))?(?:\?([\w-]+=[\w-]+(?:&[\w-]+=[\w-]+)*)?)?$/g
          

          【讨论】:

            【解决方案6】:

            我的带有命名分组的版本:

            /mongodb:\/\/(?:(?<login>[^\:\/\?\#\[\]\@]+)(?::(?<password>[^\:\/\?\#\[\]\@]+))?@)?(?<host>[\w\.\-]+(?::\d+)?(?:,[\w\.\-]+(?::\d+)?)*)(?:\/(?<dbname>[\w\.\-]+))?(?:\?(?<query>[\w\.\-]+=[\w\.\-]+(?:&[\w\.\-]+=[\w.\-]+)*))?/gm
            

            在这里测试:https://regex101.com/r/34kvZw/1

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2014-11-25
              • 2010-10-01
              • 2022-12-05
              • 1970-01-01
              • 1970-01-01
              • 2010-09-07
              • 1970-01-01
              相关资源
              最近更新 更多