Browse Source

[JS] Bug fix for getNationalSignificantNumber (#1821)

* Fixing bug where getNationalSignificantNumber for an empty phone number object would return the string null in Javascript.
pull/1825/head
lararennie 9 years ago
committed by GitHub
parent
commit
10001e03f2
4 changed files with 18 additions and 5 deletions
  1. +3
    -3
      javascript/i18n/phonenumbers/demo-compiled.js
  2. +8
    -2
      javascript/i18n/phonenumbers/phonenumberutil.js
  3. +5
    -0
      javascript/i18n/phonenumbers/phonenumberutil_test.js
  4. +2
    -0
      pending_code_changes.txt

+ 3
- 3
javascript/i18n/phonenumbers/demo-compiled.js View File

@ -431,9 +431,9 @@ B:"2",C:"2",D:"3",E:"3",F:"3",G:"4",H:"4",I:"4",J:"5",K:"5",L:"5",M:"6",N:"6",O:
function O(a,b){for(var c=new C,d,e=a.length,f=0;f<e;++f)d=a.charAt(f),d=b[d.toUpperCase()],null!=d&&c.a(d);return c.toString()}function mb(a){return null!=a&&isNaN(a)&&a.toUpperCase()in Pa}function P(a,b,c){if(0==u(b,2)&&t(b,5)){var d=y(b,5);if(0<d.length)return d}var d=y(b,1),e=Q(b);if(0==c)return R(d,0,e,"");if(!(d in J))return e;a=S(a,d,T(d));b=nb(b,a,c);e=ob(e,a,c);return R(d,c,e,b)}
function pb(a,b,c){var d=y(b,1),e=Q(b);if(!(d in J))return e;a=S(a,d,T(d));b=nb(b,a,2);c=ob(e,a,2,c);return R(d,2,c,b)}function S(a,b,c){return"001"==c?U(a,""+b):U(a,c)}
function qb(a,b,c){if(!mb(c))return P(a,b,1);var d=y(b,1),e=Q(b);if(!(d in J))return e;if(1==d){if(null!=c&&0<=p(J[1],c.toUpperCase()))return d+" "+P(a,b,2)}else if(d==rb(a,c))return P(a,b,2);var f=U(a,c),g=y(f,11);c="";N(Sa,g)?c=g:t(f,17)&&(c=y(f,17));a=S(a,d,T(d));e=ob(e,a,1);b=nb(b,a,1);return 0<c.length?c+" "+d+" "+e+b:R(d,1,e,b)}
function sb(a,b,c){var d;if(d=t(b,5)){if(d=t(b,4))d=y(b,1),d=S(a,d,T(d)),d=!(d&&y(d,26));if(!d){d=y(b,1);if(d=S(a,d,T(d))){var e=Q(b);d=!!tb(w(d,19),e)}else d=!1;d=!d}}if(d)return y(b,5);if(!t(b,6))return P(a,b,2);switch(u(b,6)){case 1:a=P(a,b,1);break;case 5:a=qb(a,b,c);break;case 10:a=P(a,b,1).substring(1);break;default:d=T(y(b,1));var f;(c=U(a,d))?(c=y(c,12),f=c.length?c=c.replace("~",""):null):f=null;c=P(a,b,2);if(null!=f&&f.length){var g;a:{e=y(b,5);e=O(e,L);if(!e.lastIndexOf(f,0))try{g=ub(a,
vb(a,e.substring(f.length),d,!1));break a}catch(h){}g=!1}if(g)a=c;else if(g=U(a,d),d=Q(b),g=tb(w(g,19),d))if(d=y(g,4),e=d.indexOf("$1"),0>=e)a=c;else if(d=d.substring(0,e),d=O(d,L),d.length)if(g=g.clone(),Ga(g,4),d=[g],g=y(b,1),c=Q(b),g in J){a=S(a,g,T(g));if(e=tb(d,c))d=e.clone(),e=y(e,4),0<e.length&&(f=y(a,12),0<f.length?(e=e.replace(bb,f).replace(cb,"$1"),v(d,4,e)):Ga(d,4)),c=wb(c,d,2);a=nb(b,a,2);a=R(g,2,c,a)}else a=c;else a=c;else a=c}else a=c}b=y(b,5);null!=a&&0<b.length&&(g=O(a,Qa),c=O(b,Qa),
g!=c&&(a=b));return a}function Q(a){var b=""+u(a,2);return t(a,4)&&u(a,4)&&0<y(a,8)?Array(y(a,8)+1).join("0")+b:b}function R(a,b,c,d){switch(b){case 0:return"+"+a+c+d;case 1:return"+"+a+" "+c+d;case 3:return"tel:+"+a+"-"+c+d;default:return c+d}}function ob(a,b,c,d){b=w(b,20).length&&2!=c?w(b,20):w(b,19);return(b=tb(b,a))?wb(a,b,c,d):a}function tb(a,b){for(var c,d=a.length,e=0;e<d;++e){c=a[e];var f=z(c,3);if(!f||!b.search(u(c,3,f-1)))if(f=new RegExp(u(c,1)),N(f,b))return c}return null}
function sb(a,b,c){var d;if(d=t(b,5)){d=y(b,1);if(d=S(a,d,T(d))){var e=Q(b);d=!!tb(w(d,19),e)}else d=!1;d=!d}if(d)return y(b,5);if(!t(b,6))return P(a,b,2);switch(u(b,6)){case 1:a=P(a,b,1);break;case 5:a=qb(a,b,c);break;case 10:a=P(a,b,1).substring(1);break;default:d=T(y(b,1));var f;(c=U(a,d))?(c=y(c,12),f=c.length?c=c.replace("~",""):null):f=null;c=P(a,b,2);if(null!=f&&f.length){var g;a:{e=y(b,5);e=O(e,L);if(!e.lastIndexOf(f,0))try{g=ub(a,vb(a,e.substring(f.length),d,!1));break a}catch(h){}g=!1}if(g)a=
c;else if(g=U(a,d),d=Q(b),g=tb(w(g,19),d))if(d=y(g,4),e=d.indexOf("$1"),0>=e)a=c;else if(d=d.substring(0,e),d=O(d,L),d.length)if(g=g.clone(),Ga(g,4),d=[g],g=y(b,1),c=Q(b),g in J){a=S(a,g,T(g));if(e=tb(d,c))d=e.clone(),e=y(e,4),0<e.length&&(f=y(a,12),0<f.length?(e=e.replace(bb,f).replace(cb,"$1"),v(d,4,e)):Ga(d,4)),c=wb(c,d,2);a=nb(b,a,2);a=R(g,2,c,a)}else a=c;else a=c;else a=c}else a=c}b=y(b,5);null!=a&&0<b.length&&(g=O(a,Qa),c=O(b,Qa),g!=c&&(a=b));return a}
function Q(a){if(!t(a,2))return"";var b=""+u(a,2);return t(a,4)&&u(a,4)&&0<y(a,8)?Array(y(a,8)+1).join("0")+b:b}function R(a,b,c,d){switch(b){case 0:return"+"+a+c+d;case 1:return"+"+a+" "+c+d;case 3:return"tel:+"+a+"-"+c+d;default:return c+d}}function ob(a,b,c,d){b=w(b,20).length&&2!=c?w(b,20):w(b,19);return(b=tb(b,a))?wb(a,b,c,d):a}function tb(a,b){for(var c,d=a.length,e=0;e<d;++e){c=a[e];var f=z(c,3);if(!f||!b.search(u(c,3,f-1)))if(f=new RegExp(u(c,1)),N(f,b))return c}return null}
function wb(a,b,c,d){var e=y(b,2),f=new RegExp(u(b,1)),g=y(b,5);2==c&&null!=d&&0<d.length&&0<g.length?(b=g.replace(db,d),e=e.replace(ab,b),a=a.replace(f,e)):(b=y(b,4),a=2==c&&null!=b&&0<b.length?a.replace(f,e.replace(ab,b)):a.replace(f,e));3==c&&(a=a.replace(RegExp("^[-x\u2010-\u2015\u2212\u30fc\uff0d-\uff0f \u00a0\u00ad\u200b\u2060\u3000()\uff08\uff09\uff3b\uff3d.\\[\\]/~\u2053\u223c\uff5e]+"),""),a=a.replace(RegExp("[-x\u2010-\u2015\u2212\u30fc\uff0d-\uff0f \u00a0\u00ad\u200b\u2060\u3000()\uff08\uff09\uff3b\uff3d.\\[\\]/~\u2053\u223c\uff5e]+",
"g"),"-"));return a}function nb(a,b,c){return t(a,3)&&u(a,3).length?3==c?";ext="+u(a,3):t(b,13)?u(b,13)+y(a,3):" ext. "+y(a,3):""}function xb(a,b){switch(b){case 4:return u(a,5);case 3:return u(a,4);case 1:return u(a,3);case 0:case 2:return u(a,2);case 5:return u(a,6);case 6:return u(a,8);case 7:return u(a,7);case 8:return u(a,21);case 9:return u(a,25);case 10:return u(a,28);default:return u(a,1)}}
function yb(a,b){return W(a,u(b,1))?W(a,u(b,5))?4:W(a,u(b,4))?3:W(a,u(b,6))?5:W(a,u(b,8))?6:W(a,u(b,7))?7:W(a,u(b,21))?8:W(a,u(b,25))?9:W(a,u(b,28))?10:W(a,u(b,2))?u(b,18)||W(a,u(b,3))?2:0:!u(b,18)&&W(a,u(b,3))?1:-1:-1}function U(a,b){if(null==b)return null;b=b.toUpperCase();var c=a.a[b];if(!c){c=Pa[b];if(!c)return null;c=(new H).f(G.h(),c);a.a[b]=c}return c}function W(a,b){var c=a.length;return 0<z(b,9)&&-1==p(w(b,9),c)?!1:N(y(b,2),a)}function ub(a,b){var c=zb(a,b);return Ab(a,b,c)}


+ 8
- 2
javascript/i18n/phonenumbers/phonenumberutil.js View File

@ -2430,10 +2430,16 @@ i18n.phonenumbers.PhoneNumberUtil.prototype.
i18n.phonenumbers.PhoneNumberUtil.prototype.getNationalSignificantNumber =
function(number) {
// If leading zero(s) have been set, we prefix this now. Note this is not a
// national prefix.
if (!number.hasNationalNumber()) {
return '';
}
/** @type {string} */
var nationalNumber = '' + number.getNationalNumber();
// If leading zero(s) have been set, we prefix this now. Note that a single
// leading zero is not the same as a national prefix; leading zeros should be
// dialled no matter whether you are dialling from within or outside the
// country, national prefixes are added when formatting nationally if
// applicable.
if (number.hasItalianLeadingZero() && number.getItalianLeadingZero() &&
number.getNumberOfLeadingZerosOrDefault() > 0) {
return Array(number.getNumberOfLeadingZerosOrDefault() + 1).join('0') +


+ 5
- 0
javascript/i18n/phonenumbers/phonenumberutil_test.js View File

@ -492,6 +492,11 @@ function testGetNationalSignificantNumber() {
assertEquals('12345678',
phoneUtil.getNationalSignificantNumber(INTERNATIONAL_TOLL_FREE));
// An empty number.
/** @type {i18n.phonenumbers.PhoneNumber} */
var emptyNumber = new i18n.phonenumbers.PhoneNumber();
assertEquals('', phoneUtil.getNationalSignificantNumber(emptyNumber));
}
function testGetNationalSignificantNumber_ManyLeadingZeros() {


+ 2
- 0
pending_code_changes.txt View File

@ -7,3 +7,5 @@ Code changes:
digits inadvertently. Now this is checked at the end of the method anyway.
However slight formatting differences with this method on invalid numbers
starting with 0s may be noticed in some countries.
- Bug fix for Javascript: getNationalSignificantNumber used to print the string
"null" for empty phone number objects, now it returns an empty string.

Loading…
Cancel
Save