Skip to content

Commit

Permalink
isPossibleNumber
Browse files Browse the repository at this point in the history
  • Loading branch information
jackocnr committed Jul 25, 2023
1 parent 4c38a55 commit bbeda4d
Show file tree
Hide file tree
Showing 10 changed files with 141 additions and 49 deletions.
6 changes: 6 additions & 0 deletions build/js/intlTelInput-jquery.js
Original file line number Diff line number Diff line change
Expand Up @@ -1456,6 +1456,12 @@
var val = this._getFullNumber().trim();
return window.intlTelInputUtils ? intlTelInputUtils.isValidNumber(val, this.selectedCountryData.iso2) : null;
}
}, {
key: "isPossibleNumber",
value: function isPossibleNumber() {
var val = this._getFullNumber().trim();
return window.intlTelInputUtils ? intlTelInputUtils.isPossibleNumber(val, this.selectedCountryData.iso2) : null;
}
}, {
key: "setCountry",
value: function setCountry(originalCountryCode) {
Expand Down
2 changes: 1 addition & 1 deletion build/js/intlTelInput-jquery.min.js

Large diffs are not rendered by default.

6 changes: 6 additions & 0 deletions build/js/intlTelInput.js
Original file line number Diff line number Diff line change
Expand Up @@ -1451,6 +1451,12 @@
var val = this._getFullNumber().trim();
return window.intlTelInputUtils ? intlTelInputUtils.isValidNumber(val, this.selectedCountryData.iso2) : null;
}
}, {
key: "isPossibleNumber",
value: function isPossibleNumber() {
var val = this._getFullNumber().trim();
return window.intlTelInputUtils ? intlTelInputUtils.isPossibleNumber(val, this.selectedCountryData.iso2) : null;
}
}, {
key: "setCountry",
value: function setCountry(originalCountryCode) {
Expand Down
2 changes: 1 addition & 1 deletion build/js/intlTelInput.min.js

Large diffs are not rendered by default.

80 changes: 40 additions & 40 deletions build/js/utils.js

Large diffs are not rendered by default.

2 changes: 2 additions & 0 deletions spec.html
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,8 @@

<script src="src/spec/tests/methods/getValidationError.js"></script>

<script src="src/spec/tests/methods/isPossibleNumber.js"></script>

<script src="src/spec/tests/methods/isValidNumber.js"></script>

<script src="src/spec/tests/methods/setCountry.js"></script>
Expand Down
8 changes: 8 additions & 0 deletions src/js/intlTelInput.js
Original file line number Diff line number Diff line change
Expand Up @@ -1657,6 +1657,14 @@ class Iti {
: null;
}

// check if input val is possible number (weaker validation, but more future-proof) - assumes the global function isPossibleNumber (from utilsScript)
isPossibleNumber() {
const val = this._getFullNumber().trim();
return window.intlTelInputUtils
? intlTelInputUtils.isPossibleNumber(val, this.selectedCountryData.iso2)
: null;
}

// update the selected flag, and update the input val accordingly
setCountry(originalCountryCode) {
const countryCode = originalCountryCode.toLowerCase();
Expand Down
14 changes: 14 additions & 0 deletions src/js/utils.js
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,19 @@ const isValidNumber = (number, countryCode) => {
}
};

// check if given number is possible
const isPossibleNumber = (number, countryCode) => {
try {
const phoneUtil = i18n.phonenumbers.PhoneNumberUtil.getInstance();
const numberObj = phoneUtil.parseAndKeepRawInput(number, countryCode);
// can't use phoneUtil.isPossibleNumber directly as it accepts IS_POSSIBLE_LOCAL_ONLY numbers e.g. local numbers that are much shorter
const result = phoneUtil.isPossibleNumberWithReason(numberObj);
return result === i18n.phonenumbers.PhoneNumberUtil.ValidationResult.IS_POSSIBLE;
} catch (e) {
return false;
}
};

/********************
* NOTE: for following sections, keys must be in quotes to force closure compiler to preserve them
********************/
Expand Down Expand Up @@ -149,6 +162,7 @@ goog.exportSymbol("intlTelInputUtils.getExtension", getExtension);
goog.exportSymbol("intlTelInputUtils.getNumberType", getNumberType);
goog.exportSymbol("intlTelInputUtils.getValidationError", getValidationError);
goog.exportSymbol("intlTelInputUtils.isValidNumber", isValidNumber);
goog.exportSymbol("intlTelInputUtils.isPossibleNumber", isPossibleNumber);
// enums
goog.exportSymbol("intlTelInputUtils.numberFormat", numberFormat);
goog.exportSymbol("intlTelInputUtils.numberType", numberType);
Expand Down
56 changes: 56 additions & 0 deletions src/spec/tests/methods/isPossibleNumber.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
"use strict";

describe("isPossibleNumber:", function() {

beforeEach(function() {
intlSetup(true);
input = $("<input>").wrap("div");
});

afterEach(function() {
intlTeardown();
});



describe("init plugin and call public method isPossibleNumber", function() {

beforeEach(function() {
iti = window.intlTelInput(input[0]);
});

it("returns true for: valid intl number", function() {
iti.setNumber("+44 7733 123456");
expect(iti.isPossibleNumber()).toBeTruthy();
});

it("returns true for: possible but invalid (bad dial code) intl number", function() {
iti.setNumber("+44 9999 123456");
expect(iti.isPossibleNumber()).toBeTruthy();
});

it("returns false for: invalid (too short by 2 digits) intl number", function() {
iti.setNumber("+44 7733 1234");
expect(iti.isPossibleNumber()).toBeFalsy();
});

// guess this is a quirk of UK phone numbers that some valid ones are only 10 digits (e.g. 0773312345)
it("returns true for: invalid (too short by 1 digit) intl number", function() {
iti.setNumber("+44 7733 12345");
expect(iti.isPossibleNumber()).toBeTruthy();
});

it("returns false for: invalid (too long) intl number", function() {
iti.setNumber("+44 7733 1234567");
expect(iti.isPossibleNumber()).toBeFalsy();
});

it("returns null when utils script is not available", function() {
delete window.intlTelInputUtils;
iti.setNumber("+44 7733 123456");
expect(iti.isPossibleNumber()).toBeNull();
});

});

});
14 changes: 7 additions & 7 deletions src/spec/tests/methods/isValidNumber.js
Original file line number Diff line number Diff line change
Expand Up @@ -24,22 +24,22 @@ describe("isValidNumber:", function() {
expect(iti.isValidNumber()).toBeTruthy();
});

it("returns false for: invalid intl number", function() {
it("returns false for: invalid (too short) intl number", function() {
iti.setNumber("+44 7733 123");
expect(iti.isValidNumber()).toBeFalsy();
});

it("returns false for: possible but invalid (bad dial code) intl number", function() {
iti.setNumber("+44 9999 123456");
expect(iti.isValidNumber()).toBeFalsy();
});

it("returns null when utils script is not available", function() {
delete window.intlTelInputUtils;
iti.setNumber("+44 7733 123456");
expect(iti.isValidNumber()).toBeNull();
});

/*it("returns false for: valid intl number containing alpha chars", function() {
iti.setNumber("+44 7733 123 abc");
expect(iti.isValidNumber()).toBeFalsy();
});*/

});


Expand All @@ -62,7 +62,7 @@ describe("isValidNumber:", function() {
expect(iti.isValidNumber()).toBeTruthy();
});

it("returns false for: correct selected country, invalid number", function() {
it("returns false for: correct selected country, invalid (too short) number", function() {
iti.setCountry("gb");
iti.setNumber("07733 123");
expect(iti.isValidNumber()).toBeFalsy();
Expand Down

0 comments on commit bbeda4d

Please sign in to comment.