Проверка полей
Здравствуйте есть код проверка полей на необходимые символы, здесь только не происходит выборка из полей, а данные уже есть в объекте 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] существует? |
Часовой пояс GMT +3, время: 08:14. |