Здравствуйте есть код проверка полей на необходимые символы, здесь только не происходит выборка из полей, а данные уже есть в объекте data
var data = {
first_name: "Super",
last_name: "Man",
age: "unknown",
username: "o_O"
}
var validator = {
// все доступные проверки
types: {},
// сообщение об ошибках
// в текущем сеансе проверки
messages: [],
// текущие параметры проверки
// имя: тип провеки
config: {},
// интерфейсный метод
// аргумент `data` - 'это пары ключ => значение
validate: function (data) {
var i, msg, type, checker, result_ok;
//удалить все сообщения
this.messages = [];
for (i in data) {
if (data.hasOwnProperty(i)) {
type = this.config[i];
checker = this.types[type];
if(!type) {
continue; // проверкане требуется
}
if (!checker) { // ай-ай-ай-ай
throw {
name: "ValidationError",
massage: "No handler to validate type " + type
};
}
result_ok = checker.validate(data[i]);
if (!result_ok) {
msg = "Invalid value for *" + i + "*, " +
checker.instructions;
this.messages.push(msg);
}
}
}
return this.hasErrors();
},
// вспомогательный метод
hasErrors: function () {
return this.messages.length !==0;
}
}
validator.config = {
first_name: 'isNonEmpty',
age: 'isNumber',
username: 'isAlphaNum'
};
// проверяет наличие значения
validator.types.isNonEmpty = {
validate: function (value) {
return value !== "";
},
instructions: "the value cannot be empty"
};
// проверяет, является ли значение числом
validator.types.isNumber = {
validate: function (value) {
return !isNaN(value);
},
instructions: "the value can only be a valid number, e.g. 1, 3.14 or 2010"
};
// проверяет, содержит ли значение только буквы и цифры
validator.types.isAlphaNum = {
validate: function (value){
return !/[^a-z0-9]/i.test(value);
},
instructions: "the value can only contain characters and numbers,no special symbols"
}
validator.validate(data);
if(validator.hasErrors()) {
console.log(validator.messages.join("\n"));
}
Этот код работает проверил в консоли firebug, но здесь есть для меня не понятные моменты
пусть в этой строчке checker = this.types[type]; определилось isNonEmpty тогда выполнится функция
validator.types.isNonEmpty = {
validate: function (value) {
return value !== "";
},
instructions: "the value cannot be empty"
};
здесь если я правильно понимаю выолняется функция validate c аргументом value, тоесть не могу понять если посмотреть на эту функцию то она и сама выпоняется но из результатов видно что выполняется функция
validate: function (data) {
var i, msg, type, checker, result_ok;
//удалить все сообщения
this.messages = [];
for (i in data) {
if (data.hasOwnProperty(i)) {
type = this.config[i];
checker = this.types[type];
if(!type) {
continue; // проверкане требуется
}
if (!checker) { // ай-ай-ай-ай
throw {
name: "ValidationError",
massage: "No handler to validate type " + type
};
}
result_ok = checker.validate(data[i]);
if (!result_ok) {
msg = "Invalid value for *" + i + "*, " +
checker.instructions;
this.messages.push(msg);
}
}
}
return this.hasErrors();
}
только как связать эту функция и этот возврат return value !== ""; который я встречаю в первые но как я понял он срабатывает если строка не пустая а если пустая то в эту переменную checker.instructions; записывается какое либо строка в зависимости от выполняемой функции
когда мы попали на метку validat: мы доходим до этого участка
result_ok = checker.validate(data[i]);
if (!result_ok) {
msg = "Invalid value for *" + i + "*, " +
checker.instructions;
this.messages.push(msg);
}
вот опять не понятно инструкция выполняется если result_ok ==false, как она может быть фолс если data[i] существует?