Показать сообщение отдельно
  #1 (permalink)  
Старый 04.02.2017, 00:00
Профессор
Отправить личное сообщение для psiklop Посмотреть профиль Найти все сообщения от psiklop
 
Регистрация: 04.03.2015
Сообщений: 163

Нормализация ФИО
Вот написал такую функцию, особо не заморачивался, может кто улучшит.
Так как пользователи пишут фио, то капслоком, то наоборот без заглавных букв, то в неправильном порядке.
Функция не проверяет на валидность - она исправляет, проверять надо после нее.
Простая функция, но эффект достаточно занимательный, я считаю такая должна быть в каждой форме.

function fiofix(param) {
var str = [];
var temp;
var v = param.trim();
function fioporyadok(a,b) {
var f = ["ов","ова","ин","ина","ко"];
var o = ["ич","вна"];
for (var i = 0; i < f.length; i++) {
if (a.lastIndexOf(f[i]) == a.length-f[i].length) return -1;
if (b.lastIndexOf(f[i]) == b.length-f[i].length) return 1;}
for (var i = 0; i < o.length; i++) {
if (a.lastIndexOf(o[i]) == a.length-o[i].length) return 1;
if (b.lastIndexOf(o[i]) == b.length-o[i].length) return -1;}
return 0;}
v = v.replace(/^-*/, '');
v = v.replace(/-{2,}/g, '-');
v = v.replace(/\s{2,}/g, ' ');
v = v.replace(/\s*-\s*/g, '-');
if (v == "") return;
v = v.split(" ");
v.forEach(function(i) {
i = i.trim();
if (i == "") return;
temp = i[0].toUpperCase();
temp += i.substr(1).toLowerCase();
str.push(temp);
});
str.sort(fioporyadok);
v = str.join(" ");
str = [];
v = v.split("-");
v.forEach(function(i) {
temp = i[0].toUpperCase();
temp += i.substr(1);
str.push(temp);
});
return str.join("-");}

alert(fiofix("сергеевна ИРИНА карпова"));

Последний раз редактировалось psiklop, 04.02.2017 в 00:08.
Ответить с цитированием