mm-phone-validator
v1.0.2
Published
Validate Myanmar phone numbers, detect operator (MPT, Ooredoo, ATOM/Telenor, MyTel, MecTel) and network type. Supports Myanmar numerals, +95 country code, spaces and dashes. Zero dependencies.
Maintainers
Readme
myanmar-phone-validator 🇲🇲
Validate Myanmar phone numbers and auto-detect the operator (MPT, Ooredoo, ATOM, MyTel, MecTel) + network type. Zero dependencies. Works with ESM, CommonJS, browsers, and TypeScript.
⚠️ MNP note: Prefixes indicate the originally allocated operator — a ported number may now belong to a different network.
✨ Features
- ✅ Phone number validation (modern 11-digit + legacy short numbers)
- 📡 Auto operator detection: MPT · Ooredoo · ATOM · MyTel · MecTel
- 📶 Network type: GSM / WCDMA / CDMA 450 / CDMA 800 / CDMA
- 🔢 Myanmar digits (၀-၉),
+95country code, spaces and dashes supported - 📦 Dual ESM + CommonJS + TypeScript types, zero dependencies
📦 Install
npm install myanmar-phone-validator🚀 Usage
ESM (import)
import {
isValidMMPhoneNumber,
getOperator,
validate,
} from 'myanmar-phone-validator';
isValidMMPhoneNumber('09977123456'); // true
isValidMMPhoneNumber('+959977123456'); // true
isValidMMPhoneNumber('၀၉၉၇၇၁၂၃၄၅၆'); // true (Myanmar digits)
getOperator('09977123456'); // 'Ooredoo'
getOperator('09777123456'); // 'ATOM'
getOperator('09677123456'); // 'MyTel'
getOperator('09421123456'); // 'MPT'
validate('09977123456');
// {
// valid: true,
// normalized: '09977123456',
// international: '+959977123456',
// operator: 'Ooredoo',
// networkType: 'GSM'
// }CommonJS (require)
const { getOperator, isValid } = require('myanmar-phone-validator');
getOperator('09777123456'); // 'ATOM'
isValid('09421123456'); // trueBrowser
<script type="module">
import { getOperator } from './src/index.js';
console.log(getOperator('09977123456')); // 'Ooredoo'
</script>Full-result API
import myanmarPhoneValidator from 'myanmar-phone-validator';
myanmarPhoneValidator.getTelecomName('09777123456'); // 'Telenor' (legacy name)
myanmarPhoneValidator.getPhoneNetworkType('09421123456'); // 'GSM' | 'WCDMA' | ...
myanmarPhoneValidator.formatInternational('09977123456'); // '+959977123456'
myanmarPhoneValidator.isValidMMPhoneNumber('123'); // false📖 API Reference
| Function | Description |
|---|---|
| isValidMMPhoneNumber(n, { strict }) | Format validation. strict: true also requires a known operator |
| isValidMyanmarPhone, isValid, isValidPhoneNumber | Aliases of the above |
| getOperator(n) | 'MPT' \| 'Ooredoo' \| 'ATOM' \| 'MyTel' \| 'MecTel' \| 'Unknown' |
| getTelecomName(n) | Legacy names: 'Telenor' for ATOM, 'MEC' for MecTel (drop-in compatible with myanmar-phonenumber) |
| getPhoneNetworkType(n) / getNetworkType(n) | 'GSM' \| 'WCDMA' \| 'CDMA 450 MHz' \| 'CDMA 800 MHz' \| 'CDMA' \| 'Unknown' |
| normalizeInput(n) / normalize(n) | Convert any supported input to 09… national form |
| sanitizeInput(n) / sanitize(n) | Trim, convert Myanmar digits to English, strip separators |
| formatNational(n) | Normalized 09…, or '' if invalid |
| formatInternational(n) | +95…, or '' if invalid |
| validate(n) | { valid, normalized, international, operator, networkType } |
| isMpt / isOoredoo / isAtom / isTelenor / isMytel / isMecTel / isMec | Boolean helpers |
| OPERATORS, NETWORK_TYPES | Constants |
📡 Operator prefixes
Normalized 09… form:
| Operator | Pattern | Example |
|---|---|---|
| Ooredoo | 0994–0999, 11 digits | 09977123456 |
| ATOM (ex-Telenor) | 0974–0979, 11 digits | 09777123456 |
| MyTel | 0965–0969, 11 digits | 09677123456 |
| MecTel | 09340 / 09346 / 09349, 11 digits | 09340123456 |
| MPT | Legacy ranges: 092…, 094…, 095…, CDMA 093… / 098…, WCDMA… | 09421123456 |
| Unknown | Valid format but unallocated prefix | — |
General validity = 09 + 7–9 digits (9–11 digits total) — covers old CDMA short numbers through modern 11-digit GSM numbers.
✍️ Accepted input formats
09XXXXXXXXX— e.g.09977123456959XXXXXXXXX/+959XXXXXXXXX— e.g.+95997712345600959XXXXXXXXX- Missing trunk zero —
9977123456→09977123456 - Separators ignored —
09-977 123 456,09.977.123.456,(09) 977123456 - Myanmar numerals —
၀၉၉၇၇၁၂၃၄၅၆
🧪 Try it / Test page
No server needed — just double-click:
test-page.htmlSingle-number live check + batch test (one number per line) + API cheat sheet.
🔄 Migration from myanmar-phonenumber
// before
import myanmarPhoneNumber from 'myanmar-phonenumber';
myanmarPhoneNumber.getTelecomName(n);
// after — same function names still work
import { getTelecomName, isValidMMPhoneNumber } from 'myanmar-phone-validator';Differences / fixes vs the old lib:
getOperator()returns canonical'ATOM'/'MecTel'— usegetTelecomName()for legacy'Telenor'/'MEC'.- Fixed bug where MyTel / MecTel numbers were misclassified as MPT.
sanitizeInputno longer throws on empty input (returns'').- Added
validate(),formatInternational(),formatNational(),{ strict }mode, boolean helpers, TypeScript types, dual ESM + CJS.
💻 Development
npm test # run tests
npm run test:verbose # detailed output
node examples/usage.mjs
npm pack --dry-run # check publish files🚀 Publish to NPM
npm login
npm publish --access publicBefore publishing, fill in package.json: author, repository.url, bugs.url, homepage.
⚖️ License
MIT — see LICENSE.
