Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 01.07.2018, 10:24
Новичок на форуме
Отправить личное сообщение для heejew Посмотреть профиль Найти все сообщения от heejew
 
Регистрация: 01.07.2018
Сообщений: 4

Получение маски номера телефона
ДОброго дня всем! Увы, не нашел подобного или не верно поставил вопрос в гугле.
Используется только логика, UI и валидация то есть.
Суть задачи нужно отдать в функцию номер, допустим, 9777899899, а получить из нее маску, например, DDDDABBABB.
То есть цифры превратить в буквы, похожие цифры - похожие буквы.Буквы заведомо любые.
К сожалению, в js я только недавно вливаюсь(как в целом в прог-ие) и пока надумать такую реализацию не смог
Есть только догадки, что можно грубо говоря разделить строку на единичные символы и уже работать с ними. А дальше ((

Потом это будет сравниваться с таблицей масок имеющихся и выдавать данные. Но это уже ясно.

Есть еще одна задача, менее приоритная.
Есть в массиве строки, где указаны диапазоны. Например 9777000000-9777999999
Нужно сопоставить подходящий диапазон к выбранному номеру. .Задача проще, тупо разделить начальное значение и конечное и условием сравнивать, чтобы было число больше начального значения и меньше конечного. Я верно понимаю решение или можно проще?

Последний раз редактировалось heejew, 01.07.2018 в 10:27.
Ответить с цитированием
  #2 (permalink)  
Старый 01.07.2018, 11:04
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Коды цифр это 30 - 39 (hex) или 48 - 57 (dec), а латинские символы начинаются с кода 41 hex (65 dec). То есть просто добавляйте к коду цифр 20 (dec) заменяя полученным цифру.
Ответить с цитированием
  #3 (permalink)  
Старый 01.07.2018, 11:13
Новичок на форуме
Отправить личное сообщение для heejew Посмотреть профиль Найти все сообщения от heejew
 
Регистрация: 01.07.2018
Сообщений: 4

Сообщение от laimas Посмотреть сообщение
Коды цифр это 30 - 39 (hex) или 48 - 57 (dec), а латинские символы начинаются с кода 41 hex (65 dec). То есть просто добавляйте к коду цифр 20 (dec) заменяя полученным цифру.
Кхм. Не догадался бы, спасибо за наводку) Это сильно упростило задачу.
Ответить с цитированием
  #4 (permalink)  
Старый 01.07.2018, 11:29
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Если брать диапазон символов начиная с А, то добавлять нужно 17.

alert('0123456789'.replace(/\d/g,function(a) {
    return String.fromCharCode(a.charCodeAt()+17)
}))
Ответить с цитированием
  #5 (permalink)  
Старый 01.07.2018, 13:17
Новичок на форуме
Отправить личное сообщение для heejew Посмотреть профиль Найти все сообщения от heejew
 
Регистрация: 01.07.2018
Сообщений: 4

Внешне вариант годный. А есть ли возможность заменять не на порядковые буквы, Например, 9991708888 - AAABCDDDD,
9998889999 - AAABBBAAAA
То есть первая встретившаяся цифра берет строго А, вторая отличающаяся берет В, третья - С. Первая цифра (тут, напр, 9) заменяется строго на А - все остальные 9ки заменяются на А, следующая отличающаяся цифра заменяется на B (тут 1) и все 1ки заменяются на B.

Думается мне, что тут без циклов не обойтись.
Что-то вроде
9991707777
1.Встречаем первую цифру - заменяем на А (Заносим саму цифру в темп переменную)
A991707777
2. Проходим циклом по строке, заменяя все цифры, равные первой цифре(тем переменной), на А
AAA1707777
3. Заново идем по строке, встречаем первую цифру в уже обработанной строке - заменяем на следующую неиспользованную букву алфавита B
АААB707777
4. Проходим циклом, как в п.2, заменяем на B. Тут менять нечего, да.
5. Снова встречаем первую цифру, меняем на C
АААBC07777
6. Меняем все 7 на С
AAABC0CCCC
Ну и приходим к AAABCDCCCC

Я это примерно так вижу

Последний раз редактировалось heejew, 01.07.2018 в 13:19.
Ответить с цитированием
  #6 (permalink)  
Старый 01.07.2018, 13:26
Новичок на форуме
Отправить личное сообщение для heejew Посмотреть профиль Найти все сообщения от heejew
 
Регистрация: 01.07.2018
Сообщений: 4

Так, стоп. Я кажется понял, что изначально задачу не так поставил. Сейчас я пришел к тому, что действительно надо сделать, попробую отыскать. Тут, если верно понимаю, нужен regex. Пойду курить его, дабы понять, как выцепить конкретно первую цифру. Лоль, все оказалось проще. Это управляется модификатором /g Как дурак сижу и туплю))

Спасибо за содействие, оказалось просто
number = "9991707777";
var search = "\\d";
var replaceTo = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J'];
for (t = 0; t < number.length; t++) {
                         var temp = number.match( /\d/ );
                         number = number.replace(new RegExp(temp, 'g'), replaceTo[t]);
                     } 
                     alert(number);


Вторая задача кстати да, тоже решилась. В массиве объектов начало и конец диапазона оказались в разных свойствах, что упростило задачу, стоило лишь сравнить числа.

Последний раз редактировалось heejew, 01.07.2018 в 13:58.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Получение номера класса, по которому произведен клик Illibes Элементы интерфейса 5 15.10.2017 13:45
Варианты форматирования номера телефона AlexTrader Общие вопросы Javascript 15 03.08.2017 15:00
Выбор номера телефона через select и кнопка позвонить Exhaust_ Элементы интерфейса 11 08.08.2016 22:35
Проверка поля номера телефона iskander83 Общие вопросы Javascript 2 14.05.2013 15:22
Проверка номера телефона при помощи регулярок Amateur Javascript под браузер 3 20.10.2011 13:34