ip.js 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. (function($) {
  2. $.fn.bootstrapValidator.i18n.ip = $.extend($.fn.bootstrapValidator.i18n.ip || {}, {
  3. 'default': 'Please enter a valid IP address',
  4. ipv4: 'Please enter a valid IPv4 address',
  5. ipv6: 'Please enter a valid IPv6 address'
  6. });
  7. $.fn.bootstrapValidator.validators.ip = {
  8. html5Attributes: {
  9. message: 'message',
  10. ipv4: 'ipv4',
  11. ipv6: 'ipv6'
  12. },
  13. /**
  14. * Return true if the input value is a IP address.
  15. *
  16. * @param {BootstrapValidator} validator The validator plugin instance
  17. * @param {jQuery} $field Field element
  18. * @param {Object} options Can consist of the following keys:
  19. * - ipv4: Enable IPv4 validator, default to true
  20. * - ipv6: Enable IPv6 validator, default to true
  21. * - message: The invalid message
  22. * @returns {Boolean|Object}
  23. */
  24. validate: function(validator, $field, options) {
  25. var value = $field.val();
  26. if (value === '') {
  27. return true;
  28. }
  29. options = $.extend({}, { ipv4: true, ipv6: true }, options);
  30. var ipv4Regex = /^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/,
  31. ipv6Regex = /^\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(%.+)?\s*$/,
  32. valid = false,
  33. message;
  34. switch (true) {
  35. case (options.ipv4 && !options.ipv6):
  36. valid = ipv4Regex.test(value);
  37. message = options.message || $.fn.bootstrapValidator.i18n.ip.ipv4;
  38. break;
  39. case (!options.ipv4 && options.ipv6):
  40. valid = ipv6Regex.test(value);
  41. message = options.message || $.fn.bootstrapValidator.i18n.ip.ipv6;
  42. break;
  43. case (options.ipv4 && options.ipv6):
  44. /* falls through */
  45. default:
  46. valid = ipv4Regex.test(value) || ipv6Regex.test(value);
  47. message = options.message || $.fn.bootstrapValidator.i18n.ip['default'];
  48. break;
  49. }
  50. return {
  51. valid: valid,
  52. message: message
  53. };
  54. }
  55. };
  56. }(window.jQuery));