quantique-field-validator 1.0.4 → 1.0.5-beta
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -14,6 +14,10 @@ const defaultErrorMessages = (rules, type) => {
|
|
|
14
14
|
Alphanumeric: "value must be alphanumeric",
|
|
15
15
|
chassisNumber: "Invalid chassis number",
|
|
16
16
|
engineNumber: "Invalid engine number",
|
|
17
|
+
ipAddress: "Invalid IP Address",
|
|
18
|
+
name: "Invalid name",
|
|
19
|
+
rto: "Invalid RTO",
|
|
20
|
+
ifsc: "Invalid Bank IFSC Code",
|
|
17
21
|
customValidation:
|
|
18
22
|
rules.errorMessages?.customValidation || "Custom validation failed",
|
|
19
23
|
};
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
//Bank IFSC validation
|
|
2
|
+
const validateBankIFSC = (
|
|
3
|
+
value,
|
|
4
|
+
rules = { minLength: 11, maxLength: 11 },
|
|
5
|
+
defaultErrorMessages,
|
|
6
|
+
type
|
|
7
|
+
) => {
|
|
8
|
+
if (rules?.minLength && value?.length < rules?.minLength) {
|
|
9
|
+
return {
|
|
10
|
+
isValid: false,
|
|
11
|
+
error:
|
|
12
|
+
rules?.errorMessages?.minLength ||
|
|
13
|
+
defaultErrorMessages(rules, type).minLength,
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
if (rules?.maxLength && value?.length > rules?.maxLength) {
|
|
18
|
+
return {
|
|
19
|
+
isValid: false,
|
|
20
|
+
error:
|
|
21
|
+
rules?.errorMessages?.maxLength ||
|
|
22
|
+
defaultErrorMessages(rules, type).maxLength,
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
const defaultRegex = /^[A-Z]{4}0[A-Z0-9]{6}$/;
|
|
27
|
+
const regexToUse = rules?.regex ? new RegExp(rules.regex) : defaultRegex;
|
|
28
|
+
if (!regexToUse.test(value)) {
|
|
29
|
+
return {
|
|
30
|
+
isValid: false,
|
|
31
|
+
error: rules?.errorMessages?.invalid
|
|
32
|
+
? rules?.errorMessages?.invalid
|
|
33
|
+
: defaultErrorMessages(rules, type).ifsc ||
|
|
34
|
+
defaultErrorMessages(rules, type).invalid,
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
return { isValid: true, error: '' };
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
module.exports = validateBankIFSC;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
// First/Middle/Last Name validation
|
|
2
|
+
const validateFirstMiddleLastName = (value, rules, defaultErrorMessages, type) => {
|
|
3
|
+
if (rules?.minLength && value?.length < rules?.minLength) {
|
|
4
|
+
return {
|
|
5
|
+
isValid: false,
|
|
6
|
+
error:
|
|
7
|
+
rules?.errorMessages?.minLength ||
|
|
8
|
+
defaultErrorMessages(rules, type).minLength,
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
if (rules?.maxLength && value?.length > rules?.maxLength) {
|
|
13
|
+
return {
|
|
14
|
+
isValid: false,
|
|
15
|
+
error:
|
|
16
|
+
rules?.errorMessages?.maxLength ||
|
|
17
|
+
defaultErrorMessages(rules, type).maxLength,
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
const defaultRegex = /^[a-zA-ZàáâäãåąčćęèéêëėįìíîïłńòóôöõøùúûüųūÿýżźñçčšžÀÁÂÄÃÅĄĆČĖĘÈÉÊËÌÍÎÏĮŁŃÒÓÔÖÕØÙÚÛÜŲŪŸÝŻŹÑßÇŒÆČŠŽ∂ð]+$/u;
|
|
22
|
+
const regexToUse = rules?.regex ? new RegExp(rules.regex) : defaultRegex;
|
|
23
|
+
if (!regexToUse.test(value)) {
|
|
24
|
+
return {
|
|
25
|
+
isValid: false,
|
|
26
|
+
error: rules?.errorMessages?.invalid
|
|
27
|
+
? rules?.errorMessages?.invalid
|
|
28
|
+
: defaultErrorMessages(rules, type).name ||
|
|
29
|
+
defaultErrorMessages(rules, type).invalid,
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
return { isValid: true, error: '' };
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
module.exports = validateFirstMiddleLastName;
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
// IP Address validation
|
|
2
|
+
const validateIPAddress = (value, rules, defaultErrorMessages, type) => {
|
|
3
|
+
if (rules?.minLength && value?.length < rules?.minLength) {
|
|
4
|
+
return {
|
|
5
|
+
isValid: false,
|
|
6
|
+
error:
|
|
7
|
+
rules?.errorMessages?.minLength ||
|
|
8
|
+
defaultErrorMessages(rules, type).minLength,
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
if (rules?.maxLength && value?.length > rules?.maxLength) {
|
|
13
|
+
return {
|
|
14
|
+
isValid: false,
|
|
15
|
+
error:
|
|
16
|
+
rules?.errorMessages?.maxLength ||
|
|
17
|
+
defaultErrorMessages(rules, type).maxLength,
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
const defaultRegex =
|
|
22
|
+
rules?.version === 'v4'
|
|
23
|
+
? /^(?:(?: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]?)$/
|
|
24
|
+
: rules?.version === 'v6'
|
|
25
|
+
? /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/
|
|
26
|
+
: /^(?:(?: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]?)$|^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/;
|
|
27
|
+
const regexToUse = rules?.regex ? new RegExp(rules.regex) : defaultRegex;
|
|
28
|
+
if (!regexToUse.test(value)) {
|
|
29
|
+
return {
|
|
30
|
+
isValid: false,
|
|
31
|
+
error: rules?.errorMessages?.invalid
|
|
32
|
+
? rules?.errorMessages?.invalid
|
|
33
|
+
: defaultErrorMessages(rules, type).ipAddress ||
|
|
34
|
+
defaultErrorMessages(rules, type).invalid,
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
return { isValid: true, error: '' };
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
module.exports = validateIPAddress;
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
// RTO validation
|
|
2
|
+
const validateRTO = (value, rules, defaultErrorMessages, type) => {
|
|
3
|
+
if (rules?.minLength && value?.length < rules?.minLength) {
|
|
4
|
+
return {
|
|
5
|
+
isValid: false,
|
|
6
|
+
error:
|
|
7
|
+
rules?.errorMessages?.minLength ||
|
|
8
|
+
defaultErrorMessages(rules, type).minLength,
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
if (rules?.maxLength && value?.length > rules?.maxLength) {
|
|
13
|
+
return {
|
|
14
|
+
isValid: false,
|
|
15
|
+
error:
|
|
16
|
+
rules?.errorMessages?.maxLength ||
|
|
17
|
+
defaultErrorMessages(rules, type).maxLength,
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
const defaultRegex =
|
|
22
|
+
rules?.version === 'new'
|
|
23
|
+
? /^[A-Z]{2}-[0-9]{1,2}(-[A-Z]{1,2})?$/
|
|
24
|
+
: rules?.version === 'all'
|
|
25
|
+
? /^[A-Z]{2}-?[0-9]{1,2}(-?[A-Z]{1,2})?$/
|
|
26
|
+
: /^[A-Z]{2}-[0-9]{1,2}$/;
|
|
27
|
+
const regexToUse = rules?.regex ? new RegExp(rules.regex) : defaultRegex;
|
|
28
|
+
if (!regexToUse.test(value)) {
|
|
29
|
+
return {
|
|
30
|
+
isValid: false,
|
|
31
|
+
error: rules?.errorMessages?.invalid
|
|
32
|
+
? rules?.errorMessages?.invalid
|
|
33
|
+
: defaultErrorMessages(rules, type).rto ||
|
|
34
|
+
defaultErrorMessages(rules, type).invalid,
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
return { isValid: true, error: '' };
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
module.exports = validateRTO;
|
package/index.js
CHANGED
|
@@ -7,23 +7,27 @@
|
|
|
7
7
|
* @returns {object} - Returns { isValid: boolean, error: string }
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
|
-
const defaultErrorMessages = require(
|
|
11
|
-
const validateString = require(
|
|
12
|
-
const validateAlphanumeric = require(
|
|
13
|
-
const validateNumber = require(
|
|
14
|
-
const validateFloatNumber = require(
|
|
15
|
-
const validateDate = require(
|
|
16
|
-
const validateName = require(
|
|
17
|
-
const
|
|
18
|
-
const
|
|
19
|
-
const
|
|
20
|
-
const
|
|
21
|
-
const
|
|
22
|
-
const
|
|
23
|
-
const
|
|
24
|
-
const
|
|
25
|
-
const
|
|
26
|
-
const
|
|
10
|
+
const defaultErrorMessages = require('./Messages/defaultErrorMessages');
|
|
11
|
+
const validateString = require('./Validators/validateString');
|
|
12
|
+
const validateAlphanumeric = require('./Validators/validateAlphanumeric');
|
|
13
|
+
const validateNumber = require('./Validators/validateNumber');
|
|
14
|
+
const validateFloatNumber = require('./Validators/validateFloatNumber');
|
|
15
|
+
const validateDate = require('./Validators/validateDate');
|
|
16
|
+
const validateName = require('./Validators/validateName');
|
|
17
|
+
const validateFirstMiddleLastName = require('./Validators/validateFirstMiddleLastName');
|
|
18
|
+
const validateEmail = require('./Validators/validateEmail');
|
|
19
|
+
const validateMobile = require('./Validators/validateMobile');
|
|
20
|
+
const validateAddress = require('./Validators/validateAddress');
|
|
21
|
+
const validatePassword = require('./Validators/validatePassword');
|
|
22
|
+
const validateCustom = require('./Validators/validateCustom');
|
|
23
|
+
const validateAadhaar = require('./Validators/validateAadhaar');
|
|
24
|
+
const validatePanCard = require('./Validators/validatePanCard');
|
|
25
|
+
const validateGST = require('./Validators/validateGST');
|
|
26
|
+
const validateChassisNumber = require('./Validators/ValidateChassisNumber');
|
|
27
|
+
const validateEngineNumber = require('./Validators/validateEngineNumber');
|
|
28
|
+
const validateIPAddress = require('./Validators/validateIPAddress');
|
|
29
|
+
const validateRTO = require('./Validators/validateRTO');
|
|
30
|
+
const validateBankIFSC = require('./Validators/validateBankIFSC');
|
|
27
31
|
|
|
28
32
|
const dynamicValidator = (value, type, rules = {}, customValidator = null) => {
|
|
29
33
|
// Trim the value if it's a string
|
|
@@ -32,7 +36,7 @@ const dynamicValidator = (value, type, rules = {}, customValidator = null) => {
|
|
|
32
36
|
const selectedValue = value;
|
|
33
37
|
|
|
34
38
|
// Check if field is required and empty
|
|
35
|
-
if (rules.required && (!selectedValue || selectedValue ===
|
|
39
|
+
if (rules.required && (!selectedValue || selectedValue === '')) {
|
|
36
40
|
return {
|
|
37
41
|
isValid: false,
|
|
38
42
|
error:
|
|
@@ -42,16 +46,16 @@ const dynamicValidator = (value, type, rules = {}, customValidator = null) => {
|
|
|
42
46
|
}
|
|
43
47
|
|
|
44
48
|
// Skip further validation if the field is empty and not required
|
|
45
|
-
if (!rules.required && (!selectedValue || selectedValue ===
|
|
46
|
-
return { isValid: true, error:
|
|
49
|
+
if (!rules.required && (!selectedValue || selectedValue === '')) {
|
|
50
|
+
return { isValid: true, error: '' };
|
|
47
51
|
}
|
|
48
52
|
|
|
49
53
|
// First run custom validator if provided (highest priority)
|
|
50
|
-
if (customValidator && typeof customValidator ===
|
|
54
|
+
if (customValidator && typeof customValidator === 'function') {
|
|
51
55
|
const customValidation = customValidator(selectedValue);
|
|
52
56
|
|
|
53
57
|
if (
|
|
54
|
-
typeof customValidation ===
|
|
58
|
+
typeof customValidation === 'object' &&
|
|
55
59
|
customValidation.isValid === false
|
|
56
60
|
) {
|
|
57
61
|
return {
|
|
@@ -70,11 +74,11 @@ const dynamicValidator = (value, type, rules = {}, customValidator = null) => {
|
|
|
70
74
|
}
|
|
71
75
|
|
|
72
76
|
// Then run any custom validator in rules
|
|
73
|
-
if (rules.customValidator && typeof rules.customValidator ===
|
|
77
|
+
if (rules.customValidator && typeof rules.customValidator === 'function') {
|
|
74
78
|
const rulesCustomValidation = rules.customValidator(selectedValue);
|
|
75
79
|
|
|
76
80
|
if (
|
|
77
|
-
typeof rulesCustomValidation ===
|
|
81
|
+
typeof rulesCustomValidation === 'object' &&
|
|
78
82
|
rulesCustomValidation.isValid === false
|
|
79
83
|
) {
|
|
80
84
|
return {
|
|
@@ -93,57 +97,77 @@ const dynamicValidator = (value, type, rules = {}, customValidator = null) => {
|
|
|
93
97
|
|
|
94
98
|
// Then validate based on type
|
|
95
99
|
switch (type) {
|
|
96
|
-
case
|
|
100
|
+
case 'string':
|
|
97
101
|
return validateString(selectedValue, rules, defaultErrorMessages, type);
|
|
98
|
-
case
|
|
102
|
+
case 'alphanumeric':
|
|
99
103
|
return validateAlphanumeric(
|
|
100
104
|
selectedValue,
|
|
101
105
|
rules,
|
|
102
106
|
defaultErrorMessages,
|
|
103
107
|
type
|
|
104
108
|
);
|
|
105
|
-
case
|
|
109
|
+
case 'number':
|
|
106
110
|
return validateNumber(selectedValue, rules, defaultErrorMessages, type);
|
|
107
|
-
case
|
|
111
|
+
case 'float':
|
|
108
112
|
return validateFloatNumber(
|
|
109
113
|
selectedValue,
|
|
110
114
|
rules,
|
|
111
115
|
defaultErrorMessages,
|
|
112
116
|
type
|
|
113
117
|
);
|
|
114
|
-
case
|
|
118
|
+
case 'date':
|
|
115
119
|
return validateDate(selectedValue, rules, defaultErrorMessages, type);
|
|
116
|
-
case
|
|
120
|
+
case 'name':
|
|
117
121
|
return validateName(selectedValue, rules, defaultErrorMessages, type);
|
|
118
|
-
case
|
|
122
|
+
case 'firstName':
|
|
123
|
+
case 'middleName':
|
|
124
|
+
case 'lastName':
|
|
125
|
+
return validateFirstMiddleLastName(
|
|
126
|
+
selectedValue,
|
|
127
|
+
rules,
|
|
128
|
+
defaultErrorMessages,
|
|
129
|
+
type
|
|
130
|
+
);
|
|
131
|
+
case 'email':
|
|
119
132
|
return validateEmail(selectedValue, rules, defaultErrorMessages, type);
|
|
120
|
-
case
|
|
133
|
+
case 'mobile':
|
|
121
134
|
return validateMobile(selectedValue, rules, defaultErrorMessages, type);
|
|
122
|
-
case
|
|
135
|
+
case 'address':
|
|
123
136
|
return validateAddress(selectedValue, rules, defaultErrorMessages, type);
|
|
124
|
-
case
|
|
137
|
+
case 'password':
|
|
125
138
|
return validatePassword(selectedValue, rules, defaultErrorMessages, type);
|
|
126
|
-
case
|
|
139
|
+
case 'chassis':
|
|
127
140
|
return validateChassisNumber(
|
|
128
141
|
selectedValue,
|
|
129
142
|
rules,
|
|
130
143
|
defaultErrorMessages,
|
|
131
144
|
type
|
|
132
145
|
);
|
|
133
|
-
case
|
|
146
|
+
case 'engine':
|
|
134
147
|
return validateEngineNumber(
|
|
135
148
|
selectedValue,
|
|
136
149
|
rules,
|
|
137
150
|
defaultErrorMessages,
|
|
138
151
|
type
|
|
139
152
|
);
|
|
140
|
-
case
|
|
153
|
+
case 'aadhaar':
|
|
141
154
|
return validateAadhaar(selectedValue, rules, defaultErrorMessages, type);
|
|
142
|
-
case
|
|
155
|
+
case 'pan':
|
|
143
156
|
return validatePanCard(selectedValue, rules, defaultErrorMessages, type);
|
|
144
|
-
case
|
|
157
|
+
case 'gst':
|
|
145
158
|
return validateGST(selectedValue, rules, defaultErrorMessages, type);
|
|
146
|
-
case
|
|
159
|
+
case 'rto':
|
|
160
|
+
return validateRTO(selectedValue, rules, defaultErrorMessages, type);
|
|
161
|
+
case 'ifsc':
|
|
162
|
+
return validateBankIFSC(selectedValue, rules, defaultErrorMessages, type);
|
|
163
|
+
case 'ip':
|
|
164
|
+
return validateIPAddress(
|
|
165
|
+
selectedValue,
|
|
166
|
+
rules,
|
|
167
|
+
defaultErrorMessages,
|
|
168
|
+
type
|
|
169
|
+
);
|
|
170
|
+
case 'custom':
|
|
147
171
|
return validateCustom(selectedValue, rules, defaultErrorMessages, type);
|
|
148
172
|
default:
|
|
149
173
|
return {
|