【问题标题】:RegEx to identify guid or a number正则表达式来识别 guid 或数字
【发布时间】:2018-09-30 17:23:46
【问题描述】:

我有 guid 的正则表达式:

/^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a -f]{3}-[0-9a-f]{12}$/i

和正则表达式匹配一个数字:

/^[0-9]*$

但我需要匹配一个 guid 或一个数字。有没有办法匹配单个正则表达式。或者我应该分别检查 guid 和 number。

【问题讨论】:

    标签: javascript regex match guid


    【解决方案1】:

    是的,有很多方法可以做到这一点。一种是对 if 语句中的匹配项进行 OR:

    var reg1 = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
    var reg2 = /^[0-9]*$/;
    var text = " ... ";
    
    if (reg1.test(text) || reg2.test(text)) {
      // do your stuff here
    }
    

    另一种方法是ORing in the RegExp 本身:

    var regex = /(^[0-9]*)|^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
    var text = " ... ";
    
    if (regex.test(text)) {
      // do your stuff here
    }
    

    【讨论】:

      【解决方案2】:

      在正则表达式中使用| 来匹配之前或之后的内容:

      const re = /^([0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12})|[0-9]+$/i;
      console.log('11111111-1111-1111-8111-111111111111'.match(re)[0]);
      console.log('5555'.match(re)[0]);

      【讨论】:

        【解决方案3】:

        您可以使用 |两个正则表达式之间的运算符。您可以按如下方式使用它们

        /(^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i) | (^[0-9]*$)/
        

        【讨论】:

        • 两个 OR 条件之间括号的位置似乎是错误的。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-06-09
        • 1970-01-01
        相关资源
        最近更新 更多