forked from urfu-2015/javascript-tasks-2
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathphoneBook.js
More file actions
141 lines (126 loc) · 4.57 KB
/
Copy pathphoneBook.js
File metadata and controls
141 lines (126 loc) · 4.57 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
'use strict';
var phoneBook = {}; // Здесь вы храните записи как хотите
function isValidName(name) {
return /^[a-zа-яё]+$/i.test(name);
}
function isValidPhone(phone) {
return /^(\+?(\d{1,3})|(\d{1,2}))\s?(\(?\d{3}\)|\d{3})[\s|-]?\d{3}[\s|-]?\d{1}[\s|-]?\d{3}/
.test(phone);
}
function isValidEmail(email) {
return /^[0-9A-z\-_]+@[0-9A-zА-яё\-_]+(\.[0-9A-zА-яё\-_]+)+/i.test(email);
}
/*
Функция добавления записи в телефонную книгу.
На вход может прийти что угодно, будьте осторожны.
*/
module.exports.add = function add(name, phone, email) {
if (isValidName(name) && isValidPhone(phone) && isValidEmail(email)) {
var key = name + phone + email;
phoneBook[key] = {
name: name,
phone: phone,
email: email
};
var result = 'add ' + name + ', ' + phone + ', ' + email;
console.log(result);
}
};
/*
Функция поиска записи в телефонную книгу.
Поиск ведется по всем полям.
*/
module.exports.find = function find(query) {
var keys = Object.keys(phoneBook);
keys.forEach(function (key) {
if (key.indexOf(query) >= 0) {
var result = 'find ' + phoneBook[key].name + ', ' + phoneBook[key].phone +
', ' + phoneBook[key].email;
console.log(result);
}
});
};
/*
Функция удаления записи в телефонной книге.
*/
module.exports.remove = function remove(query) {
var keys = Object.keys(phoneBook);
keys.forEach(function (key) {
if (key.indexOf(query) >= 0) {
var result = 'del ' + phoneBook[key].name + ', ' + phoneBook[key].phone +
', ' +
phoneBook[key].email;
console.log(result);
delete phoneBook[key];
}
});
};
/*
Функция импорта записей из файла (задача со звёздочкой!).
*/
module.exports.importFromCsv = function importFromCsv(filename) {
var data = require('fs')
.readFileSync(filename, 'utf-8');
var pattern = /\r\n|\r|\n/g;
var new_pattern = data.replace(pattern, '\n');
var contactAll = data.split('\n');
for (var i = 0; i < contactAll.length - 1; i++) {
this.add.apply(this, contactAll[i].split(';'));
}
};
/*
Функция вывода всех телефонов в виде ASCII (задача со звёздочкой!).
*/
module.exports.showTable = function showTable() {
var maxLengthPhone = 7;
var collSpacePhone = 0;
var maxLengthName = 3;
var collSpaceName = 0;
var maxLengthEmail = 5;
var collSpaceEmail = 0;
var lengthTable = 25;
var lengthPhone;
var lengthName;
var lengthEmail;
var maxLengthTable;
var keys = Object.keys(phoneBook);
keys.forEach(function (key) {
lengthPhone = phoneBook[key].phone.length;
lengthName = phoneBook[key].name.length;
lengthEmail = phoneBook[key].email.length;
if (maxLengthPhone < lengthPhone) {
maxLengthPhone = lengthPhone;
collSpacePhone = maxLengthPhone - 7;
}
if (maxLengthName < lengthName) {
maxLengthName = lengthName;
collSpaceName = maxLengthName - 3;
}
if (maxLengthEmail < lengthEmail) {
maxLengthEmail = lengthEmail;
collSpaceEmail = maxLengthEmail - 5;
}
});
maxLengthTable = (maxLengthPhone + maxLengthName + maxLengthEmail + 10);
if (lengthTable < maxLengthTable) {
lengthTable = maxLengthTable;
}
console.log('-'.repeat(lengthTable));
console.log('| Имя ' + ' '.repeat(collSpaceName) + '| Телефон ' + ' '.repeat(collSpacePhone) +
'| email ' + ' '.repeat(collSpaceEmail) + '|');
console.log('-'.repeat(lengthTable));
keys.forEach(function (key) {
collSpacePhone = maxLengthPhone - phoneBook[key].phone.length;
collSpaceName = maxLengthName - phoneBook[key].name.length;
collSpaceEmail = maxLengthEmail - phoneBook[key].email.length;
console.log('| ' + phoneBook[key].name + ' '.repeat(collSpaceName) + ' | ' +
phoneBook[key].phone + ' '.repeat(collSpacePhone) + ' | ' + phoneBook[
key].email +
' '.repeat(collSpaceEmail) + ' |');
});
console.log('-'.repeat(lengthTable));
};
String.prototype.repeat = String.prototype.repeat || function (n) {
return new Array(n + 1)
.join(this);
};