UNPKG

formvalidation

Version:

The best jQuery plugin to validate form fields. Support Bootstrap, Foundation, Pure, SemanticUI, UIKit and custom frameworks

125 lines (112 loc) 5.11 kB
/** * stringLength validator * * @link http://formvalidation.io/validators/stringLength/ * @author https://twitter.com/nghuuphuoc * @copyright (c) 2013 - 2015 Nguyen Huu Phuoc * @license http://formvalidation.io/license/ */ (function($) { FormValidation.I18n = $.extend(true, FormValidation.I18n || {}, { 'en_US': { stringLength: { 'default': 'Please enter a value with valid length', less: 'Please enter less than %s characters', more: 'Please enter more than %s characters', between: 'Please enter value between %s and %s characters long' } } }); FormValidation.Validator.stringLength = { html5Attributes: { message: 'message', min: 'min', max: 'max', trim: 'trim', utf8bytes: 'utf8Bytes' }, enableByHtml5: function($field) { var options = {}, maxLength = $field.attr('maxlength'), minLength = $field.attr('minlength'); if (maxLength) { options.max = parseInt(maxLength, 10); } if (minLength) { options.min = parseInt(minLength, 10); } return $.isEmptyObject(options) ? false : options; }, /** * Check if the length of element value is less or more than given number * * @param {FormValidation.Base} validator The validator plugin instance * @param {jQuery} $field Field element * @param {Object} options Consists of following keys: * - min * - max * At least one of two keys is required * The min, max keys define the number which the field value compares to. min, max can be * - A number * - Name of field which its value defines the number * - Name of callback function that returns the number * - A callback function that returns the number * * - message: The invalid message * - trim: Indicate the length will be calculated after trimming the value or not. It is false, by default * - utf8bytes: Evaluate string length in UTF-8 bytes, default to false * @returns {Object} */ validate: function(validator, $field, options) { var value = validator.getFieldValue($field, 'stringLength'); if (options.trim === true || options.trim === 'true') { value = $.trim(value); } if (value === '') { return true; } var locale = validator.getLocale(), min = $.isNumeric(options.min) ? options.min : validator.getDynamicOption($field, options.min), max = $.isNumeric(options.max) ? options.max : validator.getDynamicOption($field, options.max), // Credit to http://stackoverflow.com/a/23329386 (@lovasoa) for UTF-8 byte length code utf8Length = function(str) { var s = str.length; for (var i = str.length - 1; i >= 0; i--) { var code = str.charCodeAt(i); if (code > 0x7f && code <= 0x7ff) { s++; } else if (code > 0x7ff && code <= 0xffff) { s += 2; } if (code >= 0xDC00 && code <= 0xDFFF) { i--; } } return s; }, length = options.utf8Bytes ? utf8Length(value) : value.length, isValid = true, message = options.message || FormValidation.I18n[locale].stringLength['default']; if ((min && length < parseInt(min, 10)) || (max && length > parseInt(max, 10))) { isValid = false; } switch (true) { case (!!min && !!max): message = FormValidation.Helper.format(options.message || FormValidation.I18n[locale].stringLength.between, [parseInt(min, 10), parseInt(max, 10)]); break; case (!!min): message = FormValidation.Helper.format(options.message || FormValidation.I18n[locale].stringLength.more, parseInt(min, 10)); break; case (!!max): message = FormValidation.Helper.format(options.message || FormValidation.I18n[locale].stringLength.less, parseInt(max, 10)); break; default: break; } return { valid: isValid, message: message }; } }; }(jQuery));