代码之家  ›  专栏  ›  技术社区  ›  Sparw

Javascript Regex-比较最后2对字符

  •  0
  • Sparw  · 技术社区  · 6 年前

    我有这样一个字符串(电话号码):

    0223216582
    

    我想检查最后两对数字(65和82)是否正确 不相等 :

    console.log(/^02.*(\d{2})\1$/.test('0223216582')); // false
    console.log(/^02.*(\d{2})\1$/.test('0223216565')); // true
    

    我需要这样的东西:

    console.log(/<regex>/.test('0223216582')); // true
    console.log(/<regex>/.test('0223216565')); // false
    

    编辑

    我将在MongoDB请求中使用这个正则表达式,如下所示:

    this.findOne({
        used: {$eq: false},
        number: {$regex: /^02.*(\d{2})\1$/}
    });
    

    谢谢。

    0 回复  |  直到 6 年前
        1
  •  4
  •   anubhava    6 年前

    您可以将此正则表达式用于负展望:

    ^02.*(\d{2})(?!\1$)\d{2}$
    

    RegEx Demo

    • ^ :开始
    • 02 02 :
    • .* :匹配0个或更多字符
    • (\d{2}) :匹配2个数字并将其捕获到组#1中
    • (?!\1$) :要断言的负前瞻条件与捕获组#1中的2位数不同
    • \d{2}
    • $ :结束
        2
  •  1
  •   Nicolas    6 年前

    我觉得这里不需要正则表达式。您只需获取两个数字的最后两位,然后使用普通字符串比较它们:

    function comparePhone(ph1, ph2) {
        return ph1.splice(-2) !== ph2.splice(-2);
    }
    

        3
  •  0
  •   Tim Biegeleisen    6 年前

    我会在这里使用算术:

    var number = 223212255;
    if ( (Math.floor(number / 1000) % 10 == Math.floor(number / 100) % 10) &&
         (Math.floor(number / 10) % 10 == number % 10 )) {
        console.log("MATCH");
    }
    else {
        console.log("NO MATCH");
    }

    这个解决方案可能比基于regex的解决方案性能更好。