Как упростить логику? Регулярки

157
15 апреля 2018, 23:48

Нужно проверить

  1. Длину и вывести ошибку что длина не должна превышать 10 цифр начиная с кода оператора

  2. какая цифра стоит после 8 или 7.Вывести что оператор должен начинаться с цифры 3, 4, 5, 6, 8, 9 если после 7 и 8 стоит другая цифра

    const isValidMobile = value => {
        const phoneMobile = /^[78]{0,1}[345689]/;
    
      //value приходит в виде +790.... или в виде 890...
      const isNotFullSevenPhoneInput =
       /^\+7/.test(value) && value.replace(/[^\d]+/g, '').length < 12;
     const isNotFullEightPhoneInput =
    /^8/.test(value) && value.length < 11;
     if (isNotFullSevenPhoneInput || isNotFullEightPhoneInput ) {
        return phoneError.lengthError
      }
    
     const startWithCorrectSymbol =
        (/^8/.test(value) && phoneMobile.test(value))
        || ( /^\+7/.test(value) &&  
    phoneMobile.test(value.replace(/[^\d]+/g, ''))) ;
     if (!startWithCorrectSymbol) {
        return phoneError.operatorError;
     }
      return '';
    

    };

Answer 1

const phoneError = { 
  operatorError: 'Ошибка оператора', 
  lengthError: 'Ошибка длины' 
}; 
 
const isValidMobile = value => { 
  const match = value.match(/^\+?(\d+)/); 
  // Обе проверки "от противного", то есть мы ищем не соответствие ожидаемому, а несоответствие 
  return !/^(?:\+7|8)[345689]/.test(value) // Проверяем, что НЕ начинается с ("+7" или "8", а следом идет одно из чисел `[345689]`) 
    ? phoneError.operatorError // если это так, то возвращаем `phoneError.operatorError` 
    : match && match[1].length > 11 // Проверяем, что не считая возможно стоящего в начале "+" друг за другом идут числа (надо убедиться, что они вообще заматчились, иначе match[1] выдаст ошибку) и их больше 11 
      ? phoneError.lengthError // если это так, то возвращаем `phoneError.lengthError` 
      : ''; 
}; 
     
console.log(isValidMobile('+790312222')); 
console.log(isValidMobile('+720312222')); 
console.log(isValidMobile('+7903122222222')); 
console.log(isValidMobile('89022222')); 
console.log(isValidMobile('81022222')); 
console.log(isValidMobile('890222222222'));

По хорошему бы конечно ещё пару проверок добавить, но ошибок под несоответствие нет (как и условий в задаче), будем считать, что оно и не надо.

READ ALSO
Как остановить перемотку слайдов?

Как остановить перемотку слайдов?

Доброго времени суток, господаПредварительно хотелось бы уточнить, что c js особо не дружим) В общем такая ситуация

187
Проверка на наличие объекта javascript

Проверка на наличие объекта javascript

После ajax запроса function(data) проверяю наличие нужного объекта

117
PhpStorm и watcher Babel, как установить и настроить?

PhpStorm и watcher Babel, как установить и настроить?

Через консоль PhpStorm выполняю установку: npm install --save-dev babel-cli, установился в корень настоящего проекта

161
Открытие ссылки в новой вкладке из iframe

Открытие ссылки в новой вкладке из iframe

Нужен совет или пикон в нужную сторону

135