Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Получение маски номера телефона (https://javascript.ru/forum/misc/74318-poluchenie-maski-nomera-telefona.html)

heejew 01.07.2018 10:24

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

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

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

laimas 01.07.2018 11:04

Коды цифр это 30 - 39 (hex) или 48 - 57 (dec), а латинские символы начинаются с кода 41 hex (65 dec). То есть просто добавляйте к коду цифр 20 (dec) заменяя полученным цифру.

heejew 01.07.2018 11:13

Цитата:

Сообщение от laimas (Сообщение 488703)
Коды цифр это 30 - 39 (hex) или 48 - 57 (dec), а латинские символы начинаются с кода 41 hex (65 dec). То есть просто добавляйте к коду цифр 20 (dec) заменяя полученным цифру.

Кхм. Не догадался бы, спасибо за наводку) Это сильно упростило задачу.

laimas 01.07.2018 11:29

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

alert('0123456789'.replace(/\d/g,function(a) {
    return String.fromCharCode(a.charCodeAt()+17)
}))

heejew 01.07.2018 13:17

Внешне вариант годный. А есть ли возможность заменять не на порядковые буквы, Например, 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:26

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

Спасибо за содействие, оказалось просто :D
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);


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


Часовой пояс GMT +3, время: 02:49.