VGrabko
@VGrabko
Golang, Php, Js

Что делать перфекционисту в такой ситуации?

У меня код валидации
A.Plugin([
    "Validator"
]);
A.Middleware.AuthSave = function (e) {

    if (A.Validator.Len(e.login, 0)) {
        SetId("error", "Заполните поле Login");
    } else if (A.Validator.Len(e.email, 0)) {
        SetId("error", "Заполните поле Email");
    } else if (A.Validator.Len(e.pass, 0)) {
        SetId("error", "Заполните поле Pass");
    } else if (!A.Validator.IsLogin(e.login)) {
        SetId("error", "Login может содержать a-z . и -");
    } else if (!A.Validator.IsEmail(e.email)) {
        SetId("error", "Email не валиден");
    } else {
        ClearId("error");
        e.ok();
    }
};

Как можно исправить кучу этих if else ?
  • Вопрос задан
  • 729 просмотров
Решения вопроса 4
alsopub
@alsopub
Чисто как вариант - создать массив из записей типа { action: A.Validator.Len, field: e.login, param: 0, error: "Заполните поле Login" } и в цикле выполнять код типа if (!$action(field, param) { SetId("error", error); }
Ответ написан
var conditions = [{
  method: 'Len',
  params: [e.login, 0],
  expected: true,
  msg: 'Заполните поле Login'
}, {
  method: 'Len',
  params: [e.email, 0],
  expected: true,
  msg: 'Заполните поле Email'
}, {
  method: 'Len',
  params: [e.pass, 0],
  expected: true,
  msg: 'Заполните поле Pass'
}, {
  method: 'IsLogin',
  params: [e.login],
  expected: false,
  msg: 'Login может содержать a-z . и -'
}, {
  method: 'IsEmail',
  params: [e.email],
  expected: false,
  msg: 'Login может содержать a-z . и -'
}];

if(!conditions.some(function(x) {
  if(A.Validator[x.method].apply(A.Validator, x.params) === x.expected) {
    SetId("error", x.msg);
    return false;
  }
  return true;
})) {
  ClearId("error");
  e.ok(e.login, e.email, e.pass);  
}

Не тестил
Ответ написан
@MattLe
я бы ограничился просто короткой записю if (без фигурных скобок).Моем глазу так приятнее...
Ответ написан
Комментировать
VGrabko
@VGrabko Автор вопроса
Golang, Php, Js
Я вам очень благодарен. Теперь я в A.Validator добавил метод conditions который работает с массивом и при помощи кодогонерации вызывает функцию в случае успешного прохождения всех фильтров. (кодогенерация нужна так как в функцию отдаются все x.params[0]
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
ThunderCat
@ThunderCat Куратор тега JavaScript
{PHP, MySql, HTML, JS, CSS} developer
Rou1997
@Rou1997
Вот здесь проблема решена:

A.Plugin([
    "Validator"
]);
A.Middleware.AuthSave = function (e) {

    if (A.Validator.Len(e.login, 0)) {
        SetId("error", "Заполните поле Login");
    }
    else if (A.Validator.Len(e.email, 0)) {
        SetId("error", "Заполните поле Email");
    }
    else if (A.Validator.Len(e.pass, 0)) {
        SetId("error", "Заполните поле Pass");
    }
    else if (!A.Validator.IsLogin(e.login)) {
        SetId("error", "Login может содержать a-z . и -");
    }
    else if (!A.Validator.IsEmail(e.email)) {
        SetId("error", "Email не валиден");
    }
    else {
        ClearId("error");
        e.ok();
    }
};


Найдите всего 1 отличие, оно и есть решающее.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы