Получение маски номера телефона
ДОброго дня всем! Увы, не нашел подобного или не верно поставил вопрос в гугле.
Используется только логика, UI и валидация то есть. Суть задачи нужно отдать в функцию номер, допустим, 9777899899, а получить из нее маску, например, DDDDABBABB. То есть цифры превратить в буквы, похожие цифры - похожие буквы.Буквы заведомо любые. К сожалению, в js я только недавно вливаюсь(как в целом в прог-ие) и пока надумать такую реализацию не смог :( Есть только догадки, что можно грубо говоря разделить строку на единичные символы и уже работать с ними. А дальше (( Потом это будет сравниваться с таблицей масок имеющихся и выдавать данные. Но это уже ясно. Есть еще одна задача, менее приоритная. Есть в массиве строки, где указаны диапазоны. Например 9777000000-9777999999 Нужно сопоставить подходящий диапазон к выбранному номеру. .Задача проще, тупо разделить начальное значение и конечное и условием сравнивать, чтобы было число больше начального значения и меньше конечного. Я верно понимаю решение или можно проще? |
Коды цифр это 30 - 39 (hex) или 48 - 57 (dec), а латинские символы начинаются с кода 41 hex (65 dec). То есть просто добавляйте к коду цифр 20 (dec) заменяя полученным цифру.
|
Цитата:
|
Если брать диапазон символов начиная с А, то добавлять нужно 17.
alert('0123456789'.replace(/\d/g,function(a) { return String.fromCharCode(a.charCodeAt()+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 Я это примерно так вижу |
Так, стоп. Я кажется понял, что изначально задачу не так поставил. Сейчас я пришел к тому, что действительно надо сделать, попробую отыскать. Тут, если верно понимаю, нужен 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. |