global-phone-validator 1.2.0 → 1.2.1
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.
- package/README.md +25 -29
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +11 -18
- package/dist/index.js.map +1 -1
- package/dist/mobilePrefixes.d.ts +18 -0
- package/dist/mobilePrefixes.d.ts.map +1 -0
- package/dist/mobilePrefixes.js +229 -0
- package/dist/mobilePrefixes.js.map +1 -0
- package/dist/types.d.ts +0 -1
- package/dist/types.d.ts.map +1 -1
- package/package.json +3 -4
package/README.md
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
# global-phone-validator
|
|
2
2
|
|
|
3
|
-
A comprehensive Node.js + TypeScript package for validating phone numbers worldwide. Supports **all countries** with **country-specific validation rules** for 50+ major countries. Handles international formats (+CC), 0-prefixed, and plain digits.
|
|
3
|
+
A comprehensive Node.js + TypeScript package for validating **mobile phone numbers** worldwide. Supports **all countries** with **country-specific validation rules** and **mobile prefix detection** for 50+ major countries. Handles international formats (+CC), 0-prefixed, and plain digits. Returns standardized E.164 format.
|
|
4
4
|
|
|
5
5
|
## Features
|
|
6
6
|
|
|
7
|
-
- ✅ **True Global Validation**: Validates phone numbers for **all countries** with country-specific rules for 50+ major countries
|
|
7
|
+
- ✅ **True Global Validation**: Validates mobile phone numbers for **all countries** with country-specific rules for 50+ major countries
|
|
8
8
|
- ✅ **Country-Specific Rules**: Accurate validation for US, UK, Germany, France, Australia, Brazil, China, Japan, India, and 40+ more countries
|
|
9
|
+
- ✅ **Mobile Prefix Detection**: Detects mobile numbers using country-specific prefix rules for 30+ countries
|
|
9
10
|
- ✅ **Multiple Formats**: Handles international format (+CC), 0-prefixed, and plain digit formats
|
|
10
|
-
- ✅ **India-Specific**: Mobile vs landline detection for Indian phone numbers
|
|
11
11
|
- ✅ **Standardized Output**: Returns E.164 format (+CCNNNNNNNNN) with country information
|
|
12
12
|
- ✅ **TypeScript**: Fully typed with TypeScript definitions
|
|
13
13
|
- ✅ **Zero Dependencies**: No external dependencies required
|
|
@@ -38,12 +38,11 @@ const { validatePhoneNumber } = require("global-phone-validator");
|
|
|
38
38
|
|
|
39
39
|
// Test various countries
|
|
40
40
|
console.log(validatePhoneNumber("+91 98765 43210")); // India - Mobile
|
|
41
|
-
console.log(validatePhoneNumber("+1 555 123 4567")); // USA
|
|
42
|
-
console.log(validatePhoneNumber("+44
|
|
41
|
+
console.log(validatePhoneNumber("+1 555 123 4567")); // USA - Mobile
|
|
42
|
+
console.log(validatePhoneNumber("+44 7123 456789")); // UK - Mobile
|
|
43
43
|
console.log(validatePhoneNumber("+49 176 77274194")); // Germany - Mobile
|
|
44
|
-
console.log(validatePhoneNumber("+
|
|
45
|
-
console.log(validatePhoneNumber("+
|
|
46
|
-
console.log(validatePhoneNumber("+86 138 0013 8000")); // China
|
|
44
|
+
console.log(validatePhoneNumber("+61 4 1234 5678")); // Australia - Mobile
|
|
45
|
+
console.log(validatePhoneNumber("+86 138 0013 8000")); // China - Mobile
|
|
47
46
|
```
|
|
48
47
|
|
|
49
48
|
### Test Locally
|
|
@@ -72,7 +71,6 @@ console.log(result1);
|
|
|
72
71
|
// nationalNumber: '9876543210',
|
|
73
72
|
// e164: '+919876543210',
|
|
74
73
|
// isMobile: true,
|
|
75
|
-
// isFixedLine: false,
|
|
76
74
|
// country: 'IN',
|
|
77
75
|
// countryName: 'India'
|
|
78
76
|
// }
|
|
@@ -110,15 +108,18 @@ console.log(result4);
|
|
|
110
108
|
// }
|
|
111
109
|
```
|
|
112
110
|
|
|
113
|
-
### Mobile-Only Validation
|
|
111
|
+
### Mobile-Only Validation
|
|
114
112
|
|
|
115
113
|
```typescript
|
|
116
|
-
// Only accept mobile numbers
|
|
114
|
+
// Only accept mobile numbers (works for all countries with mobile prefix rules)
|
|
117
115
|
const result = validatePhoneNumber("9876543210", "IN", true);
|
|
118
116
|
console.log(result.isValid); // true (mobile number)
|
|
119
117
|
|
|
120
|
-
const result2 = validatePhoneNumber("
|
|
121
|
-
console.log(result2.isValid); //
|
|
118
|
+
const result2 = validatePhoneNumber("17677274194", "DE", true);
|
|
119
|
+
console.log(result2.isValid); // true (German mobile number)
|
|
120
|
+
|
|
121
|
+
const result3 = validatePhoneNumber("7123456789", "GB", true);
|
|
122
|
+
console.log(result3.isValid); // true (UK mobile number)
|
|
122
123
|
```
|
|
123
124
|
|
|
124
125
|
### Get Country Codes
|
|
@@ -158,7 +159,7 @@ Validates a phone number and returns detailed information.
|
|
|
158
159
|
- If `defaultCountry` is provided: Validates that detected country **matches** `defaultCountry` (strict mode)
|
|
159
160
|
- If `defaultCountry` is **not provided**: Validates based on the **detected country** from the dial code
|
|
160
161
|
- **When number doesn't have `+` prefix**: `defaultCountry` is **REQUIRED** - no default country is assumed
|
|
161
|
-
- `mobileOnly` (boolean, optional): If true, only accepts mobile numbers (
|
|
162
|
+
- `mobileOnly` (boolean, optional): If true, only accepts mobile numbers (works for all countries with mobile prefix rules). Default: false
|
|
162
163
|
|
|
163
164
|
**Returns:** `PhoneValidationResult`
|
|
164
165
|
|
|
@@ -168,8 +169,7 @@ interface PhoneValidationResult {
|
|
|
168
169
|
countryCode?: string; // e.g., '91'
|
|
169
170
|
nationalNumber?: string; // e.g., '9876543210'
|
|
170
171
|
e164?: string; // e.g., '+919876543210'
|
|
171
|
-
isMobile?: boolean; // true if mobile (
|
|
172
|
-
isFixedLine?: boolean; // true if landline (India only)
|
|
172
|
+
isMobile?: boolean; // true if mobile number (based on country-specific prefix rules)
|
|
173
173
|
country?: string; // ISO country code, e.g., 'IN'
|
|
174
174
|
countryName?: string; // Full country name, e.g., 'India'
|
|
175
175
|
}
|
|
@@ -261,7 +261,7 @@ The package includes **comprehensive validation rules** for **50+ major countrie
|
|
|
261
261
|
|
|
262
262
|
#### Asia-Pacific
|
|
263
263
|
|
|
264
|
-
- **India (91)**: 10 digits (mobile: 6-9
|
|
264
|
+
- **India (91)**: 10 digits (mobile: 6-9) - Mobile prefix detection
|
|
265
265
|
- **China (86)**: 11 digits
|
|
266
266
|
- **Japan (81)**: 10-11 digits
|
|
267
267
|
- **South Korea (82)**: 9-10 digits
|
|
@@ -306,9 +306,9 @@ import { validatePhoneNumber } from "global-phone-validator";
|
|
|
306
306
|
validatePhoneNumber("+91 98765 43210");
|
|
307
307
|
// { isValid: true, isMobile: true, e164: '+919876543210', ... }
|
|
308
308
|
|
|
309
|
-
// Valid
|
|
310
|
-
validatePhoneNumber("
|
|
311
|
-
// { isValid: true,
|
|
309
|
+
// Valid German mobile number
|
|
310
|
+
validatePhoneNumber("+49 17677274194");
|
|
311
|
+
// { isValid: true, isMobile: true, e164: '+4917677274194', country: 'DE', ... }
|
|
312
312
|
|
|
313
313
|
// Invalid number
|
|
314
314
|
validatePhoneNumber("12345");
|
|
@@ -318,17 +318,13 @@ validatePhoneNumber("12345");
|
|
|
318
318
|
validatePhoneNumber("+1 555 123 4567");
|
|
319
319
|
// { isValid: true, country: 'US', e164: '+15551234567', ... }
|
|
320
320
|
|
|
321
|
-
// UK number
|
|
322
|
-
validatePhoneNumber("+44
|
|
323
|
-
// { isValid: true, country: 'GB', e164: '+
|
|
321
|
+
// UK mobile number
|
|
322
|
+
validatePhoneNumber("+44 7123 456789");
|
|
323
|
+
// { isValid: true, country: 'GB', isMobile: true, e164: '+447123456789', ... }
|
|
324
324
|
|
|
325
|
-
// Germany number
|
|
325
|
+
// Germany mobile number
|
|
326
326
|
validatePhoneNumber("+49 17677274194");
|
|
327
|
-
// { isValid: true, country: 'DE', e164: '+4917677274194', ... }
|
|
328
|
-
|
|
329
|
-
// Germany number (landline)
|
|
330
|
-
validatePhoneNumber("+49 30 12345678");
|
|
331
|
-
// { isValid: true, country: 'DE', e164: '+493012345678', ... }
|
|
327
|
+
// { isValid: true, country: 'DE', isMobile: true, e164: '+4917677274194', ... }
|
|
332
328
|
|
|
333
329
|
// France number
|
|
334
330
|
validatePhoneNumber("+33 1 23 45 67 89");
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAe,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAe,MAAM,SAAS,CAAC;AAY7D;;;;;;;;;;;;;GAaG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,MAAM,EACb,cAAc,CAAC,EAAE,MAAM,EACvB,UAAU,GAAE,OAAe,GAC1B,qBAAqB,CA4LvB;AAGD,YAAY,EAAE,qBAAqB,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAClE,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,wBAAwB,GACzB,MAAM,SAAS,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
exports.getCountryCodeByDialCode = exports.getCountryDialCode = exports.getAllCountryCodes = void 0;
|
|
7
7
|
exports.validatePhoneNumber = validatePhoneNumber;
|
|
8
8
|
const utils_1 = require("./utils");
|
|
9
|
+
const mobilePrefixes_1 = require("./mobilePrefixes");
|
|
9
10
|
const CountryCodes_json_1 = __importDefault(require("./CountryCodes.json"));
|
|
10
11
|
const COUNTRY_CODES = CountryCodes_json_1.default;
|
|
11
12
|
/**
|
|
@@ -167,25 +168,18 @@ function validatePhoneNumber(input, defaultCountry, mobileOnly = false) {
|
|
|
167
168
|
return { isValid: false };
|
|
168
169
|
}
|
|
169
170
|
}
|
|
170
|
-
// Mobile
|
|
171
|
+
// Mobile number detection (using country-specific prefix rules)
|
|
171
172
|
let isMobile;
|
|
172
|
-
|
|
173
|
-
if (
|
|
174
|
-
|
|
175
|
-
// Indian mobile numbers start with 6, 7, 8, or 9
|
|
176
|
-
if ("6789".includes(firstDigit)) {
|
|
177
|
-
isMobile = true;
|
|
178
|
-
isFixedLine = false;
|
|
179
|
-
}
|
|
180
|
-
else {
|
|
181
|
-
// Landline numbers typically start with 0-5
|
|
182
|
-
isMobile = false;
|
|
183
|
-
isFixedLine = true;
|
|
184
|
-
}
|
|
173
|
+
const mobileCheck = (0, mobilePrefixes_1.isMobileNumber)(countryCode, nationalNumber);
|
|
174
|
+
if (mobileCheck !== undefined) {
|
|
175
|
+
isMobile = mobileCheck;
|
|
185
176
|
}
|
|
186
|
-
// If mobileOnly is true, fail non-mobile numbers
|
|
187
|
-
if (mobileOnly
|
|
188
|
-
|
|
177
|
+
// If mobileOnly is true, fail non-mobile numbers (works for all countries with mobile prefix rules)
|
|
178
|
+
if (mobileOnly) {
|
|
179
|
+
if (isMobile === false ||
|
|
180
|
+
(isMobile === undefined && mobileCheck === undefined)) {
|
|
181
|
+
return { isValid: false };
|
|
182
|
+
}
|
|
189
183
|
}
|
|
190
184
|
return {
|
|
191
185
|
isValid: true,
|
|
@@ -193,7 +187,6 @@ function validatePhoneNumber(input, defaultCountry, mobileOnly = false) {
|
|
|
193
187
|
nationalNumber,
|
|
194
188
|
e164: `+${countryCode}${nationalNumber}`,
|
|
195
189
|
isMobile,
|
|
196
|
-
isFixedLine,
|
|
197
190
|
country: detectedCountry?.code,
|
|
198
191
|
countryName: detectedCountry?.name,
|
|
199
192
|
};
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Mobile number prefix rules for countries
|
|
3
|
+
* Format: { countryCode: { mobilePrefixes: string[], landlinePrefixes?: string[] } }
|
|
4
|
+
*/
|
|
5
|
+
export interface MobilePrefixRules {
|
|
6
|
+
mobilePrefixes: string[];
|
|
7
|
+
landlinePrefixes?: string[];
|
|
8
|
+
}
|
|
9
|
+
export declare const MOBILE_PREFIX_RULES: Record<string, MobilePrefixRules>;
|
|
10
|
+
/**
|
|
11
|
+
* Check if a number is a mobile number based on country-specific prefix rules
|
|
12
|
+
*/
|
|
13
|
+
export declare function isMobileNumber(countryCode: string, nationalNumber: string): boolean | undefined;
|
|
14
|
+
/**
|
|
15
|
+
* Check if a number is a landline number based on country-specific prefix rules
|
|
16
|
+
*/
|
|
17
|
+
export declare function isLandlineNumber(countryCode: string, nationalNumber: string): boolean | undefined;
|
|
18
|
+
//# sourceMappingURL=mobilePrefixes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mobilePrefixes.d.ts","sourceRoot":"","sources":["../src/mobilePrefixes.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,iBAAiB;IAChC,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC7B;AAED,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAgMjE,CAAC;AAEF;;GAEG;AACH,wBAAgB,cAAc,CAC5B,WAAW,EAAE,MAAM,EACnB,cAAc,EAAE,MAAM,GACrB,OAAO,GAAG,SAAS,CAyBrB;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,WAAW,EAAE,MAAM,EACnB,cAAc,EAAE,MAAM,GACrB,OAAO,GAAG,SAAS,CA8BrB"}
|
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Mobile number prefix rules for countries
|
|
4
|
+
* Format: { countryCode: { mobilePrefixes: string[], landlinePrefixes?: string[] } }
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.MOBILE_PREFIX_RULES = void 0;
|
|
8
|
+
exports.isMobileNumber = isMobileNumber;
|
|
9
|
+
exports.isLandlineNumber = isLandlineNumber;
|
|
10
|
+
exports.MOBILE_PREFIX_RULES = {
|
|
11
|
+
// India (91)
|
|
12
|
+
"91": {
|
|
13
|
+
mobilePrefixes: ["6", "7", "8", "9"],
|
|
14
|
+
landlinePrefixes: ["0", "1", "2", "3", "4", "5"],
|
|
15
|
+
},
|
|
16
|
+
// Germany (49)
|
|
17
|
+
"49": {
|
|
18
|
+
mobilePrefixes: ["15", "16", "17"],
|
|
19
|
+
landlinePrefixes: ["30", "40", "69", "89", "211", "221", "231", "241", "351", "361", "371", "381", "391", "421", "431", "451", "461", "471", "481", "511", "531", "541", "561", "571", "581", "591", "611", "621", "631", "641", "651", "661", "671", "681", "691", "711", "721", "731", "741", "751", "761", "771", "781", "911", "921", "931", "941", "951", "961", "971", "981", "991"],
|
|
20
|
+
},
|
|
21
|
+
// United States/Canada (1)
|
|
22
|
+
"1": {
|
|
23
|
+
mobilePrefixes: [], // All 10-digit numbers can be mobile or landline
|
|
24
|
+
landlinePrefixes: [],
|
|
25
|
+
},
|
|
26
|
+
// United Kingdom (44)
|
|
27
|
+
"44": {
|
|
28
|
+
mobilePrefixes: ["7"], // Mobile numbers start with 7
|
|
29
|
+
landlinePrefixes: ["1", "2", "3", "4", "5", "6", "8", "9"],
|
|
30
|
+
},
|
|
31
|
+
// France (33)
|
|
32
|
+
"33": {
|
|
33
|
+
mobilePrefixes: ["6", "7"], // Mobile numbers start with 6 or 7
|
|
34
|
+
landlinePrefixes: ["1", "2", "3", "4", "5", "8", "9"],
|
|
35
|
+
},
|
|
36
|
+
// Italy (39)
|
|
37
|
+
"39": {
|
|
38
|
+
mobilePrefixes: ["3"], // Mobile numbers start with 3
|
|
39
|
+
landlinePrefixes: ["0", "1", "2", "4", "5", "6", "7", "8", "9"],
|
|
40
|
+
},
|
|
41
|
+
// Spain (34)
|
|
42
|
+
"34": {
|
|
43
|
+
mobilePrefixes: ["6", "7"], // Mobile numbers start with 6 or 7
|
|
44
|
+
landlinePrefixes: ["8", "9"],
|
|
45
|
+
},
|
|
46
|
+
// Australia (61)
|
|
47
|
+
"61": {
|
|
48
|
+
mobilePrefixes: ["4"], // Mobile numbers start with 4
|
|
49
|
+
landlinePrefixes: ["2", "3", "7", "8"],
|
|
50
|
+
},
|
|
51
|
+
// Brazil (55)
|
|
52
|
+
"55": {
|
|
53
|
+
mobilePrefixes: ["9"], // Mobile numbers start with 9 (after area code)
|
|
54
|
+
landlinePrefixes: ["1", "2", "3", "4", "5", "6", "7", "8"],
|
|
55
|
+
},
|
|
56
|
+
// China (86)
|
|
57
|
+
"86": {
|
|
58
|
+
mobilePrefixes: ["13", "14", "15", "16", "17", "18", "19"], // Mobile numbers start with 13x-19x
|
|
59
|
+
landlinePrefixes: ["10", "20", "21", "22", "23", "24", "25", "27", "28", "29", "311", "351", "371", "431", "451", "471", "531", "551", "571", "591", "631", "671", "731", "751", "771", "791", "851", "871", "891", "898", "931", "951", "971", "991"],
|
|
60
|
+
},
|
|
61
|
+
// Japan (81)
|
|
62
|
+
"81": {
|
|
63
|
+
mobilePrefixes: ["70", "80", "90"], // Mobile numbers start with 70, 80, or 90
|
|
64
|
+
landlinePrefixes: ["3", "6", "11", "52", "92", "93", "95", "96", "98"],
|
|
65
|
+
},
|
|
66
|
+
// South Korea (82)
|
|
67
|
+
"82": {
|
|
68
|
+
mobilePrefixes: ["10", "11", "16", "17", "18", "19"], // Mobile numbers start with 10x-19x
|
|
69
|
+
landlinePrefixes: ["2", "31", "32", "33", "41", "42", "43", "44", "51", "52", "53", "54", "55", "61", "62", "63", "64"],
|
|
70
|
+
},
|
|
71
|
+
// Russia (7)
|
|
72
|
+
"7": {
|
|
73
|
+
mobilePrefixes: ["9"], // Mobile numbers start with 9
|
|
74
|
+
landlinePrefixes: ["3", "4", "5", "8"],
|
|
75
|
+
},
|
|
76
|
+
// Netherlands (31)
|
|
77
|
+
"31": {
|
|
78
|
+
mobilePrefixes: ["6"], // Mobile numbers start with 6
|
|
79
|
+
landlinePrefixes: ["1", "2", "3", "4", "5", "7", "8", "9"],
|
|
80
|
+
},
|
|
81
|
+
// Sweden (46)
|
|
82
|
+
"46": {
|
|
83
|
+
mobilePrefixes: ["7"], // Mobile numbers start with 7
|
|
84
|
+
landlinePrefixes: ["8", "11", "13", "16", "18", "19", "21", "23", "26", "31", "33", "35", "36", "40", "42", "44", "46", "54", "60", "63", "90"],
|
|
85
|
+
},
|
|
86
|
+
// Norway (47)
|
|
87
|
+
"47": {
|
|
88
|
+
mobilePrefixes: ["4", "9"], // Mobile numbers start with 4 or 9
|
|
89
|
+
landlinePrefixes: ["2", "3", "5", "6", "7", "8"],
|
|
90
|
+
},
|
|
91
|
+
// Poland (48)
|
|
92
|
+
"48": {
|
|
93
|
+
mobilePrefixes: ["5", "6", "7", "8", "9"], // Mobile numbers start with 5-9
|
|
94
|
+
landlinePrefixes: ["1", "2", "3", "4"],
|
|
95
|
+
},
|
|
96
|
+
// Turkey (90)
|
|
97
|
+
"90": {
|
|
98
|
+
mobilePrefixes: ["5"], // Mobile numbers start with 5
|
|
99
|
+
landlinePrefixes: ["2", "3", "4"],
|
|
100
|
+
},
|
|
101
|
+
// Pakistan (92)
|
|
102
|
+
"92": {
|
|
103
|
+
mobilePrefixes: ["3"], // Mobile numbers start with 3
|
|
104
|
+
landlinePrefixes: ["4", "5", "6", "7", "8", "9"],
|
|
105
|
+
},
|
|
106
|
+
// Indonesia (62)
|
|
107
|
+
"62": {
|
|
108
|
+
mobilePrefixes: ["8"], // Mobile numbers start with 8
|
|
109
|
+
landlinePrefixes: ["2", "3", "4", "5", "6", "7", "9"],
|
|
110
|
+
},
|
|
111
|
+
// Philippines (63)
|
|
112
|
+
"63": {
|
|
113
|
+
mobilePrefixes: ["9"], // Mobile numbers start with 9
|
|
114
|
+
landlinePrefixes: ["2", "3", "4", "5", "6", "7", "8"],
|
|
115
|
+
},
|
|
116
|
+
// Thailand (66)
|
|
117
|
+
"66": {
|
|
118
|
+
mobilePrefixes: ["6", "8", "9"], // Mobile numbers start with 6, 8, or 9
|
|
119
|
+
landlinePrefixes: ["2", "3", "4", "5", "7"],
|
|
120
|
+
},
|
|
121
|
+
// Malaysia (60)
|
|
122
|
+
"60": {
|
|
123
|
+
mobilePrefixes: ["1"], // Mobile numbers start with 1
|
|
124
|
+
landlinePrefixes: ["3", "4", "5", "6", "7", "9"],
|
|
125
|
+
},
|
|
126
|
+
// Singapore (65)
|
|
127
|
+
"65": {
|
|
128
|
+
mobilePrefixes: ["8", "9"], // Mobile numbers start with 8 or 9
|
|
129
|
+
landlinePrefixes: ["6"],
|
|
130
|
+
},
|
|
131
|
+
// New Zealand (64)
|
|
132
|
+
"64": {
|
|
133
|
+
mobilePrefixes: ["2"], // Mobile numbers start with 2
|
|
134
|
+
landlinePrefixes: ["3", "4", "6", "7", "9"],
|
|
135
|
+
},
|
|
136
|
+
// Vietnam (84)
|
|
137
|
+
"84": {
|
|
138
|
+
mobilePrefixes: ["9"], // Mobile numbers start with 9
|
|
139
|
+
landlinePrefixes: ["2", "3", "4", "5", "6", "7", "8"],
|
|
140
|
+
},
|
|
141
|
+
// UAE (971)
|
|
142
|
+
"971": {
|
|
143
|
+
mobilePrefixes: ["5"], // Mobile numbers start with 5
|
|
144
|
+
landlinePrefixes: ["2", "3", "4", "6", "7", "9"],
|
|
145
|
+
},
|
|
146
|
+
// South Africa (27)
|
|
147
|
+
"27": {
|
|
148
|
+
mobilePrefixes: ["6", "7", "8"], // Mobile numbers start with 6, 7, or 8
|
|
149
|
+
landlinePrefixes: ["1", "2", "3", "4", "5", "9"],
|
|
150
|
+
},
|
|
151
|
+
// Nigeria (234)
|
|
152
|
+
"234": {
|
|
153
|
+
mobilePrefixes: ["7", "8", "9"], // Mobile numbers start with 7, 8, or 9
|
|
154
|
+
landlinePrefixes: ["1", "2", "3", "4", "5", "6"],
|
|
155
|
+
},
|
|
156
|
+
// Mexico (52)
|
|
157
|
+
"52": {
|
|
158
|
+
mobilePrefixes: ["1"], // Mobile numbers start with 1 (after area code)
|
|
159
|
+
landlinePrefixes: ["2", "3", "4", "5", "6", "7", "8", "9"],
|
|
160
|
+
},
|
|
161
|
+
// Argentina (54)
|
|
162
|
+
"54": {
|
|
163
|
+
mobilePrefixes: ["9"], // Mobile numbers start with 9
|
|
164
|
+
landlinePrefixes: ["1", "2", "3", "4", "5", "6", "7", "8"],
|
|
165
|
+
},
|
|
166
|
+
// Colombia (57)
|
|
167
|
+
"57": {
|
|
168
|
+
mobilePrefixes: ["3"], // Mobile numbers start with 3
|
|
169
|
+
landlinePrefixes: ["1", "2", "4", "5", "6", "7", "8", "9"],
|
|
170
|
+
},
|
|
171
|
+
};
|
|
172
|
+
/**
|
|
173
|
+
* Check if a number is a mobile number based on country-specific prefix rules
|
|
174
|
+
*/
|
|
175
|
+
function isMobileNumber(countryCode, nationalNumber) {
|
|
176
|
+
const rules = exports.MOBILE_PREFIX_RULES[countryCode];
|
|
177
|
+
if (!rules || rules.mobilePrefixes.length === 0) {
|
|
178
|
+
return undefined; // No rules available
|
|
179
|
+
}
|
|
180
|
+
// Check if number starts with any mobile prefix
|
|
181
|
+
for (const prefix of rules.mobilePrefixes) {
|
|
182
|
+
if (nationalNumber.startsWith(prefix)) {
|
|
183
|
+
return true;
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
// If landline prefixes are defined and number matches, it's a landline
|
|
187
|
+
if (rules.landlinePrefixes && rules.landlinePrefixes.length > 0) {
|
|
188
|
+
for (const prefix of rules.landlinePrefixes) {
|
|
189
|
+
if (nationalNumber.startsWith(prefix)) {
|
|
190
|
+
return false;
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
// If we have mobile prefixes but number doesn't match, it might be invalid
|
|
195
|
+
// Return undefined to let other validation handle it
|
|
196
|
+
return undefined;
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* Check if a number is a landline number based on country-specific prefix rules
|
|
200
|
+
*/
|
|
201
|
+
function isLandlineNumber(countryCode, nationalNumber) {
|
|
202
|
+
const rules = exports.MOBILE_PREFIX_RULES[countryCode];
|
|
203
|
+
if (!rules) {
|
|
204
|
+
return undefined;
|
|
205
|
+
}
|
|
206
|
+
// If landline prefixes are defined, check them
|
|
207
|
+
if (rules.landlinePrefixes && rules.landlinePrefixes.length > 0) {
|
|
208
|
+
for (const prefix of rules.landlinePrefixes) {
|
|
209
|
+
if (nationalNumber.startsWith(prefix)) {
|
|
210
|
+
return true;
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
// If mobile prefixes are defined and number doesn't match mobile, might be landline
|
|
215
|
+
if (rules.mobilePrefixes.length > 0) {
|
|
216
|
+
let matchesMobile = false;
|
|
217
|
+
for (const prefix of rules.mobilePrefixes) {
|
|
218
|
+
if (nationalNumber.startsWith(prefix)) {
|
|
219
|
+
matchesMobile = true;
|
|
220
|
+
break;
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
if (!matchesMobile) {
|
|
224
|
+
return true; // Not mobile, likely landline
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
return undefined;
|
|
228
|
+
}
|
|
229
|
+
//# sourceMappingURL=mobilePrefixes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mobilePrefixes.js","sourceRoot":"","sources":["../src/mobilePrefixes.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;CACd"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "global-phone-validator",
|
|
3
|
-
"version": "1.2.
|
|
4
|
-
"description": "A reusable Node.js + TypeScript package for validating phone numbers worldwide. Supports
|
|
3
|
+
"version": "1.2.1",
|
|
4
|
+
"description": "A reusable Node.js + TypeScript package for validating mobile phone numbers worldwide. Supports all countries with country-specific validation rules and mobile prefix detection for 50+ major countries. Handles international formats (+CC), 0-prefixed, and plain digits. Returns standardized E.164 format.",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
7
7
|
"exports": {
|
|
@@ -26,12 +26,11 @@
|
|
|
26
26
|
"validator",
|
|
27
27
|
"validation",
|
|
28
28
|
"mobile",
|
|
29
|
-
"
|
|
29
|
+
"mobile-phone",
|
|
30
30
|
"international",
|
|
31
31
|
"E164",
|
|
32
32
|
"E.164",
|
|
33
33
|
"country-code",
|
|
34
|
-
"india",
|
|
35
34
|
"worldwide",
|
|
36
35
|
"typescript"
|
|
37
36
|
],
|