Задать вопрос
@olya_097

Какая нужна регулярка чтобы проверка проходила на номера одного оператора?

к примеру что бы принимало только телефоны от лайфа)
нужно проверить на все коды лайфа

к примеру +9 (055)....
и +9 (058) это лайф

К примеру
  • Вопрос задан
  • 376 просмотров
Подписаться 1 Средний 13 комментариев
Решения вопроса 2
erge
@erge
Примус починяю
Вот еще вариант, проверяет номер написанный в любом формате со скобками вокруг кода и без с пробелами и с тире и с + в начале и без

var str = '90553334849';
alert(/^\+?9[ -]?\(?05[58]\)?[ -]?\d{3}[ -]?\d{2}[ -]?\d{2}$/.test(str));


UPD:
вот проверка (одной регуляркой в одну строку) по массиву кодов

var str = '9(055)3334849';
var allow = ['055','058'];
alert((new RegExp('^\\+?9[ -]?\\(?('+allow.join('|')+')\\)?[ -]?\\d{3}[ -]?\\d{2}[ -]?\\d{2}$')).test(str));


UPD3:
Почитайте: https://developer.mozilla.org/en-US/docs/Web/JavaS...
в разделе "Special characters in regular expressions." расписаны все спецсимволы, которые используются в регулярных выражениях.
про конструктор new RegExp там тоже есть...

кокретно в последнем примере:
т.к. регулярку нам надо создавать "динамически", то используется конструктор new RegExp , который из строки создает и возвращает регулярку и уже у нее вызывается метод .test()
про строку - в строке спецсимволы \ необходимо экранировать (предварять) символом \
в строку регулярки мы вставляем все коды из массива allow склеенные через символ |
регулярка вида (одно|второе|третье) читается как одно ИЛИ второе ИЛИ третье
в данном случае массив склеивается и реглярка читается как 055 или 058

ну, как-то так... )
Ответ написан
Комментировать
lastuniverse
@lastuniverse
Всегда вокруг да около IT тем
Одной регуляркой тут делать не правильно на мой взгляд, поэтому демонстрирую подход максимально развернуто.

Для начала ознакамливаемся с международным форматом телефонных номеров

А после немного кодим
// функция разбирает телефонный номер на части и возвращает их для проверки
function parsePhoneNumber(phoneNumberAsText){
  // через парамерт phoneNumberAsText функция получает текст содержащий номер телефона
  // предположим что обрабатываемое текстовое представление номера телефона
  // может принимать следующий вид (и имеет принадлежность к РФ):
  // "+7 (999) 888-77-55"
  // "8 (999) 888-77-55"
  // "+7 999 888-77-55"
  // "+7999888-77-55"
  // "+799988-777-55"
  // "+799988-77-555"
  // "+79998887755"
  // "89998887755"
  // и т.д.


  // убираем из него все лишнее
  var phone = "+"+phoneNumberAsText.replace(/^8/,"+7").replace(/[^0-9]/,""); 

  // составляем регулярку на основе международного формата телефонных номеров
  var re = /^(\+\d)(\d{3})(\d{7})$/;

  // получаем составные части нашего телефонного номера
  var [phone, country, code, number] = phoneNumber.match(re);
  // где:
  // phone - номер телефона в формате "+79998887766"
  // country - код страны (фикция, данный код будет работать для РФ и еще пары стран, поэтому считаем что тут всегда "+7")
  // code - трехзначный код региона/оператора
  // number - семизначный номер телефона в регионе/у оператора

  // возвращаем полученный результат разбора номера
  return {
    phone: phone, 
    country: country,
    code: code,
    number: number
  };
}

// парсим номер "8 (999) 888-77-66"
var result = parsePhoneNumber("8 (999) 888-77-66");

// на выходе в result получим объект вида
// { phone: "+79998887766", country: "+7", code: "999", number: "8887766" }

// предположим что у вас есть массив с нужными вам кодами регионов/операторов
// allowCodes = ["999", "998" и т.д];

// смотрим совпадает ли код региона/оператора с одним из кодов в allowCodes
if( allowCodes.indexOf(result.code) ){
   console.log("Номер "+result.phone+" принадлежит искомой группе/региону/оператору")
}else{
  console.log("Номер "+result.phone+" НЕ принадлежит искомой группе/региону/оператору")
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы