jii-model
Version:
84 lines (64 loc) • 2.39 kB
JavaScript
/**
* @author <a href="http://www.affka.ru">Vladimir Kozhin</a>
* @license MIT
*/
'use strict';
var Jii = require('jii');
var _isArray = require('lodash/isArray');
var Validator = require('./Validator');
/**
* @class Jii.validators.NumberValidator
* @extends Jii.validators.Validator
*/
var NumberValidator = Jii.defineClass('Jii.validators.NumberValidator', /** @lends Jii.validators.NumberValidator.prototype */{
__extends: Validator,
integerOnly: false,
max: null,
min: null,
tooBig: null,
tooSmall: null,
integerPattern: /^\s*[+-]?\d+\s*$/,
numberPattern: /^\s*[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?\s*$/,
init() {
this.__super();
if (this.message === null) {
this.message = this.integerOnly ?
Jii.t('jii', '{attribute} must be an integer.') :
Jii.t('jii', '{attribute} must be an number.');
}
if (this.min !== null && this.tooSmall === null) {
this.tooSmall = Jii.t('jii', '{attribute} must be no less than {min}.');
}
if (this.max !== null && this.tooBig === null) {
this.tooBig = Jii.t('jii', '{attribute} must be no greater than {max}.');
}
},
validateAttribute(object, attribute) {
var value = object.get(attribute);
if (_isArray(value)) {
this.addError(object, attribute, Jii.t('{attribute} is invalid.'));
return;
}
var pattern = this.integerOnly ? this.integerPattern : this.numberPattern;
if (!pattern.test(value)) {
this.addError(object, attribute, this.message);
}
if (this.min !== null && value < this.min) {
this.addError(object, attribute, this.tooSmall, {
min: this.min
});
}
if (this.max !== null && value > this.max) {
this.addError(object, attribute, this.tooBig, {
max: this.max
});
}
},
validateValue(value) {
var pattern = this.integerOnly ? this.integerPattern : this.numberPattern;
return pattern.test(value) &&
(this.min === null || value >= this.min) &&
(this.max === null || value <= this.max);
}
});
module.exports = NumberValidator;