├── .gitignore ├── .travis.yml ├── package.json ├── index.js ├── README.md └── test.js /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | *.log 3 | .DS_Store -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | sudo: required 2 | dist: trusty 3 | node_js: 4 | - "5.0" 5 | language: node_js 6 | install: 7 | - npm install 8 | cache: 9 | directories: 10 | - "node_modules" -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "naija-phone-number", 3 | "version": "1.0.2", 4 | "description": "A fast minimal module to validate a Nigerian phone number using Regular Expressions", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "mocha" 8 | }, 9 | "engines": { 10 | "node": ">= 6.0.0" 11 | }, 12 | "files": [ 13 | "index.js" 14 | ], 15 | "repository": { 16 | "type": "git", 17 | "url": "git+https://github.com/Udokah/naija-phone-number.git" 18 | }, 19 | "keywords": [ 20 | "Regular Expressions", 21 | "Validate", 22 | "naija", 23 | "number", 24 | "Nigeria", 25 | "phone", 26 | "Nigerian" 27 | ], 28 | "author": "Udo Nkwocha", 29 | "license": "MIT", 30 | "bugs": { 31 | "url": "https://github.com/Udokah/naija-phone-number/issues" 32 | }, 33 | "homepage": "https://github.com/Udokah/naija-phone-number#readme", 34 | "devDependencies": { 35 | "mocha": "3.4.2" 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | module.exports = { isValid }; 2 | 3 | /** 4 | * Validate phone number 5 | * @param {string} n 6 | * @return {Boolean} 7 | */ 8 | function isValid(n) { 9 | 10 | var firstChar; 11 | var number; 12 | var pattern = /^([0]{1})([7-9]{1})([0|1]{1})([\d]{1})([\d]{7,8})$/g; 13 | 14 | if (!n || n.length < 5) return false; 15 | 16 | if (typeof n === 'number') { 17 | 18 | // numbers never begin with 0, force this to become a string 19 | number = '0' + n; 20 | 21 | } else if (typeof n === 'string') { 22 | 23 | firstChar = n.substring(0, 1); 24 | 25 | // user may supply 0 before the number or not 26 | // e.g 0703 or 703 (two types of people ¯\_(ツ)_/¯) 27 | // either way supply missing leading 0 28 | number = (firstChar === '0') ? n : '0' + n; 29 | 30 | } else { 31 | 32 | return false; 33 | 34 | } 35 | 36 | // remove all whitespace(s) before running test 37 | return pattern.test(number.replace(/\s+/g, '')); 38 | 39 | }; 40 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | [![npm version](https://badge.fury.io/js/naija-phone-number.svg)](https://badge.fury.io/js/naija-phone-number) [![Build Status](https://travis-ci.org/Udokah/naija-phone-number.svg?branch=master)](https://travis-ci.org/Udokah/naija-phone-number) 2 | 3 | ## Naija Phone Number 4 | A fast minimal module to validate Nigerian mobile phone numbers using Regular Expressions. 5 | 6 | ### Installation 7 | ``` 8 | $ npm install naija-phone-number --save 9 | ``` 10 | 11 | ### Usage 12 | 13 | This module assumes that you already know that Nigerian numbers 14 | are prefixed by `+234` and you should not expect your users to type that. Instead your UI should look something like this. 15 | 16 | ``` 17 | |**********************| 18 | +234 | phone number here | 19 | |**********************| 20 | ``` 21 | 22 | Now that we've gotten this out of the way here's an example 23 | 24 | ```js 25 | const naijaNumber = require('naija-phone-number'); 26 | 27 | let phoneInput = document.querySelector('#phone-input').value; 28 | 29 | naijaNumber.isValid(phoneInput); // true or false 30 | ``` 31 | 32 | ### Also 33 | 34 | ```js 35 | 36 | // 12 digit numbers 37 | naijaNumber.isValid('070328582392'); // true 38 | 39 | // pass argument as Number 40 | naijaNumber.isValid(081928582392); // true 41 | 42 | // Unknown provider 43 | naijaNumber.isValid(050728582392); // false 44 | ``` 45 | 46 | ### License 47 | 48 | MIT 49 | -------------------------------------------------------------------------------- /test.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var assert = require('assert'); 4 | 5 | var naijaNumber = require('./index.js'); 6 | 7 | var prefixes = { 8 | MTN: ['0803', '0806', '0703', '0706', '0813', '0816', '0810', '0814', '0903'], 9 | Airtel: ['0708', '0802', '0808', '0812', '0701', '0902'], 10 | GLO: ['0705', '0815', '0805', '0807', '0811', '0905'], 11 | Etisalat: ['0809', '0817', '0818', '0909', '0908'], 12 | Starcomms: ['07028', '07029', '0819'], 13 | Visafone: ['0704', '07025', '07026'], 14 | Multilinks: ['0709', '07027'], 15 | Zoom: ['0707'], 16 | MTEL: ['0804'] 17 | }; 18 | 19 | var suffix = '9764320'; 20 | 21 | describe('Test Numbers', function() { 22 | 23 | describe('Network providers', function() { 24 | it('should return false for unknown network providers', function() { 25 | assert.equal(false, naijaNumber.isValid('05018154929')); 26 | }); 27 | 28 | it('MTN numbers', function() { 29 | var result = prefixes.MTN.map(function(prefix) { 30 | return naijaNumber.isValid(prefix + suffix); 31 | }); 32 | assert.equal(-1, result.indexOf(false)); 33 | }); 34 | 35 | it('GLO numbers', function() { 36 | var result = prefixes.GLO.map(function(prefix) { 37 | return naijaNumber.isValid(prefix + suffix); 38 | }); 39 | assert.equal(-1, result.indexOf(false)); 40 | }); 41 | 42 | it('Airtel numbers', function() { 43 | var result = prefixes.Airtel.map(function(prefix) { 44 | return naijaNumber.isValid(prefix + suffix); 45 | }); 46 | assert.equal(-1, result.indexOf(false)); 47 | }); 48 | 49 | it('Etisalat numbers', function() { 50 | var result = prefixes.Etisalat.map(function(prefix) { 51 | return naijaNumber.isValid(prefix + suffix); 52 | }); 53 | assert.equal(-1, result.indexOf(false)); 54 | }); 55 | 56 | it('Visafone numbers', function() { 57 | var result = prefixes.Visafone.map(function(prefix) { 58 | return naijaNumber.isValid(prefix + suffix); 59 | }); 60 | assert.equal(-1, result.indexOf(false)); 61 | }); 62 | 63 | it('Starcomms numbers', function() { 64 | var result = prefixes.Starcomms.map(function(prefix) { 65 | return naijaNumber.isValid(prefix + suffix); 66 | }); 67 | assert.equal(-1, result.indexOf(false)); 68 | }); 69 | 70 | it('Multilinks numbers', function() { 71 | var result = prefixes.Multilinks.map(function(prefix) { 72 | return naijaNumber.isValid(prefix + suffix); 73 | }); 74 | assert.equal(-1, result.indexOf(false)); 75 | }); 76 | 77 | it('Zoom numbers', function() { 78 | var result = prefixes.Zoom.map(function(prefix) { 79 | return naijaNumber.isValid(prefix + suffix); 80 | }); 81 | assert.equal(-1, result.indexOf(false)); 82 | }); 83 | 84 | it('MTEL numbers', function() { 85 | var result = prefixes.MTEL.map(function(prefix) { 86 | return naijaNumber.isValid(prefix + suffix); 87 | }); 88 | assert.equal(-1, result.indexOf(false)); 89 | }); 90 | 91 | }); 92 | 93 | describe('Length of digits.', function() { 94 | it('should return true for eleven (11) digit numbers.', function() { 95 | assert.equal(true, naijaNumber.isValid('081028582392')); 96 | }); 97 | 98 | it('should return true for twelve (12) digit numbers.', function() { 99 | assert.equal(true, naijaNumber.isValid('081981449797')); 100 | }); 101 | 102 | it('should return false for < 11 digit numbers.', function() { 103 | assert.equal(false, naijaNumber.isValid('080481447')); 104 | }); 105 | 106 | it('should return false for > 12 digit numbers.', function() { 107 | assert.equal(false, naijaNumber.isValid('0803815492999')); 108 | }); 109 | }); 110 | 111 | describe('Argument data types', function() { 112 | it('should return false for objects', function() { 113 | assert.equal(false, naijaNumber.isValid({})); 114 | }); 115 | 116 | it('should return false for arrays', function() { 117 | assert.equal(false, naijaNumber.isValid([1, 2, 3])); 118 | }); 119 | 120 | it('should return false for null', function() { 121 | assert.equal(false, naijaNumber.isValid(null)); 122 | }); 123 | 124 | it('should return false for empty string', function() { 125 | assert.equal(false, naijaNumber.isValid('')); 126 | }); 127 | 128 | it('should return false for empty args', function() { 129 | assert.equal(false, naijaNumber.isValid()); 130 | }); 131 | 132 | it('should return false for non integers or alpha-numerics', function() { 133 | assert.equal(false, naijaNumber.isValid('080d-815f929')); 134 | }); 135 | }); 136 | 137 | }); 138 | --------------------------------------------------------------------------------