1/* ========================================================================= 2 ÐÑовеÑка белоÑÑÑÑÐºÐ¸Ñ Ð½Ð¾Ð¼ÐµÑов â ÑÑоÑона бÑаÑзеÑа 3 ========================================================================= 4 ÐовÑоÑÑÐµÑ Ð»Ð¾Ð³Ð¸ÐºÑ backend/app/phone.py. ÐÑблиÑование намеÑенное: 5 в бÑаÑзеÑе Ñеловек Ð²Ð¸Ð´Ð¸Ñ Ð¾ÑÐ¸Ð±ÐºÑ ÑÑазÑ, не оÑпÑавлÑÑ ÑоÑмÑ, а ÑеÑÐ²ÐµÑ 6 пÑовеÑÑÐµÑ Ð·Ð°Ð½Ð¾Ð²Ð¾ â пÑовеÑÐºÑ Ð² бÑаÑзеÑе обойÑи ниÑего не ÑÑоиÑ. 7 8 ÐÑли пÑавила менÑÑÑÑÑ, пÑавиÑÑ Ð½Ð°Ð´Ð¾ ÐÐÐ Ñайла. Ðни ÑпеÑиалÑно 9 напиÑÐ°Ð½Ñ Ð¾Ð´Ð¸Ð½Ð°ÐºÐ¾Ð²Ð¾, ÑÑÐ¾Ð±Ñ ÑаÑÑ Ð¾Ð¶Ð´ÐµÐ½Ð¸Ðµ бÑло замеÑно пÑи ÑÑении. 10 11 УÑÑÑойÑÑво нÑмеÑаÑии: поÑле 375 Ñ Ð»Ñбого белоÑÑÑÑкого номеÑа Ñовно 12 9 ÑиÑÑ. У мобилÑнÑÑ ÑÑо 2 ÑиÑÑÑ ÐºÐ¾Ð´Ð° плÑÑ 7, Ñ Ð³Ð¾ÑодÑÐºÐ¸Ñ â 2 или 3 13 ÑиÑÑÑ ÐºÐ¾Ð´Ð° плÑÑ Ð¾ÑÑаÑок: 14 15 +375 29 688 16 16 -> 296881616 16 +375 17 311 10 10 -> 173111010 17 +375 162 53 80 60 -> 162538060 18 ========================================================================= */ 19 20window.AlatanPhone = (function () { 21 'use strict'; 22 23 var MOBILE = ['25', '29', '33', '44']; // life:), ÐТС, Ð1 24 var LANDLINE = ['15', '16', '17', '21', '22', '23']; // облаÑÑи и ÐинÑк 25 var CODES = MOBILE.concat(LANDLINE); 26 27 var ERROR_FORMAT = 28 'УкажиÑе белоÑÑÑÑкий номеÑ: 9 ÑиÑÑ Ñ ÐºÐ¾Ð´Ð¾Ð¼ опеÑаÑоÑа. ' + 29 'Ðожно как Ñгодно: 29 1234567, +375 29 123 45 67 или 8 029 123-45-67'; 30 var ERROR_CODE = 31 'Такого кода Ð½ÐµÑ Ð² ÐелаÑÑÑи. ÐобилÑнÑе наÑинаÑÑÑÑ Ñ 25, 29, 33 или 44, ' + 32 'гоÑодÑкие â Ñ 15, 16, 17, 21, 22, 23'; 33 34 /** 35 * ÐÑÐ¸Ð²Ð¾Ð´Ð¸Ñ Ð½Ð¾Ð¼ÐµÑ Ðº Ð²Ð¸Ð´Ñ +375XXXXXXXXX. 36 * @returns {{phone: string, error: string}} 37 */ 38 function normalize(raw) { 39 var digits = String(raw || '').replace(/\D/g, ''); 40 if (!digits) return { phone: '', error: ERROR_FORMAT }; 41 42 // ÐÑбÑаÑÑваем код ÑÑÑÐ°Ð½Ñ Ð² лÑбом пÑинÑÑом напиÑании. 43 if (digits.indexOf('375') === 0) { 44 digits = digits.slice(3); 45 } else if (digits.indexOf('80') === 0) { 46 // ÐеждÑгоÑодний Ð½Ð°Ð±Ð¾Ñ Ð²Ð½ÑÑÑи ÑÑÑанÑ: 8 029 123 45 67 47 digits = digits.slice(2); 48 } else if (digits.charAt(0) === '8' && digits.length === 10) { 49 // То же, но без нÑÐ»Ñ Ð¿Ð¾Ñле воÑÑмÑÑки. 50 digits = digits.slice(1); 51 } 52 53 if (digits.length !== 9) return { phone: '', error: ERROR_FORMAT }; 54 if (CODES.indexOf(digits.slice(0, 2)) === -1) { 55 return { phone: '', error: ERROR_CODE }; 56 } 57 return { phone: '+375' + digits, error: '' }; 58 } 59 60 function isValid(raw) { 61 return !normalize(raw).error; 62 } 63 64 /** ÐÑаÑÐ¸Ð²Ð°Ñ Ð·Ð°Ð¿Ð¸ÑÑ Ð´Ð»Ñ Ð¿Ð¾ÐºÐ°Ð·Ð°: +375 29 123 45 67 */ 65 function format(raw) { 66 var res = normalize(raw); 67 if (res.error) return raw; 68 var d = res.phone.slice(4); 69 return '+375 ' + d.slice(0, 2) + ' ' + d.slice(2, 5) + 70 ' ' + d.slice(5, 7) + ' ' + d.slice(7); 71 } 72 73 return { normalize: normalize, isValid: isValid, format: format }; 74})();
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.