Javascript-форум (https://javascript.ru/forum/)
-   Javascript под браузер (https://javascript.ru/forum/css-html/)
-   -   Проверка полей (https://javascript.ru/forum/css-html/50708-proverka-polejj.html)

serrrgggeee 08.10.2014 15:16

Проверка полей
 
Здравствуйте есть код проверка полей на необходимые символы, здесь только не происходит выборка из полей, а данные уже есть в объекте 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, время: 02:25.