parsley.extend.js 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. window.ParsleyConfig = window.ParsleyConfig || {};
  2. (function ($) {
  3. window.ParsleyConfig = $.extend( true, {}, window.ParsleyConfig, {
  4. validators: {
  5. minwords: function ( val, nbWords ) {
  6. val = val.replace( /(^\s*)|(\s*$)/gi, "" );
  7. val = val.replace( /[ ]{2,}/gi, " " );
  8. val = val.replace( /\n /, "\n" );
  9. val = val.split(' ').length;
  10. return val >= nbWords;
  11. }
  12. , maxwords : function ( val, nbWords ) {
  13. val = val.replace( /(^\s*)|(\s*$)/gi, "" );
  14. val = val.replace( /[ ]{2,}/gi, " " );
  15. val = val.replace( /\n /, "\n" );
  16. val = val.split(' ').length;
  17. return val <= nbWords;
  18. }
  19. , rangewords: function ( val, obj ) {
  20. val = val.replace( /(^\s*)|(\s*$)/gi, "" );
  21. val = val.replace( /[ ]{2,}/gi, " " );
  22. val = val.replace( /\n /, "\n" );
  23. val = val.split(' ').length;
  24. return val >= obj[0] && val <= obj[1];
  25. }
  26. , greaterthan: function ( val, elem, self ) {
  27. self.options.validateIfUnchanged = true;
  28. return new Number(val) > new Number($( elem ).val());
  29. }
  30. , lessthan: function ( val, elem, self ) {
  31. self.options.validateIfUnchanged = true;
  32. return new Number(val) < new Number($( elem ).val());
  33. }
  34. , beforedate: function ( val, elem, self) {
  35. return Date.parse(val) < Date.parse($(elem).val());
  36. }
  37. , afterdate: function ( val, elem, self) {
  38. return Date.parse($(elem).val()) < Date.parse(val);
  39. }
  40. , inlist: function ( val, list, self ) {
  41. var delimiter = self.options.inlistDelimiter || ',';
  42. var listItems = (list + "").split(new RegExp("\\s*\\" + delimiter + "\\s*"));
  43. return (listItems.indexOf(val.trim()) !== -1);
  44. }
  45. , luhn: function ( val, elem, self) {
  46. val = val.replace(/[ -]/g, '');
  47. var digit, n, sum, _j, _len1, _ref2;
  48. sum = 0;
  49. _ref2 = val.split('').reverse();
  50. for (n = _j = 0, _len1 = _ref2.length; _j < _len1; n = ++_j) {
  51. digit = _ref2[n];
  52. digit = +digit;
  53. if (n % 2) {
  54. digit *= 2;
  55. if (digit < 10) {
  56. sum += digit;
  57. } else {
  58. sum += digit - 9;
  59. }
  60. } else {
  61. sum += digit;
  62. }
  63. }
  64. return sum % 10 === 0;
  65. }
  66. , americandate: function ( val, elem, self) {
  67. if(!/^([01]?[0-9])[\.\/-]([0-3]?[0-9])[\.\/-]([0-9]{4}|[0-9]{2})$/.test(val)) {
  68. return false;
  69. }
  70. var parts = val.split(/[.\/-]+/);
  71. var day = parseInt(parts[1], 10);
  72. var month = parseInt(parts[0], 10);
  73. var year = parseInt(parts[2], 10);
  74. if(year == 0 || month == 0 || month > 12) {
  75. return false;
  76. }
  77. var monthLength = [ 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 ];
  78. if(year % 400 == 0 || (year % 100 != 0 && year % 4 == 0)) {
  79. monthLength[1] = 29;
  80. }
  81. return day > 0 && day <= monthLength[month - 1];
  82. }
  83. }
  84. , messages: {
  85. minwords: "This value should have %s words at least."
  86. , maxwords: "This value should have %s words maximum."
  87. , rangewords: "This value should have between %s and %s words."
  88. , greaterthan: "This value should be greater than %s."
  89. , lessthan: "This value should be less than %s."
  90. , beforedate: "This date should be before %s."
  91. , afterdate: "This date should be after %s."
  92. , luhn: "This value should pass the luhn test."
  93. , americandate: "This value should be a valid date (MM/DD/YYYY)."
  94. }
  95. });
  96. }(window.jQuery || window.Zepto));