Javascript Regex - Сравните 2 последние пары символов - PullRequest
4 голосов
/ 06 ноября 2019

У меня есть такая строка (номер телефона):

0223216582

И я хочу проверить, равны ли две последние пары чисел (65 и 82) :

На самом деле, мое регулярное выражение возвращает true, если оно равно, но это не то, что мне действительно нужно:

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$/}
});

Кто-нибудь может мне помочь?

Спасибо.

Ответы [ 3 ]

4 голосов
/ 06 ноября 2019

Вы можете использовать это регулярное выражение с отрицательным прогнозом:

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

Демонстрация RegEx

Это вернет совпадение, только если последние 2 цифры не равныпредыдущие 2 цифры.

Подробности RegEx:

  • ^: начало
  • 02: совпадающие цифры 02:
  • .*: сопоставить 0 или более символов
  • (\d{2}): сопоставить 2 цифры и захватить их в группе # 1
  • (?!\1$): отрицательное условие предпросмотра для подтверждения, чемследующие 2 цифры не такие, как в группе захвата # 1
  • \d{2}: совпадение с последними 2 цифрами
  • $: конец
1 голос
/ 06 ноября 2019

Я не вижу здесь необходимости в регулярных выражениях. Вы можете просто получить последние две цифры обоих чисел и сравнить их, используя обычное сравнение строк:

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

Здесь функция склейки возвращает подстроку оригинала. В нашем случае мы выбираем два последних символа (-2)

0 голосов
/ 06 ноября 2019

Я бы использовал здесь арифметику:

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");
}

Это решение может быть более эффективным, чем решение на основе регулярных выражений.

...