d2l-intl
Version:
D2L internationalization APIs for number, date and time formatting and parsing.
62 lines (53 loc) • 1.14 kB
JavaScript
import localeProvider from '../locale-provider.js';
export default function NumberParse(locale, options) {
options = options || {};
this.localeData = localeProvider(locale, options.locale);
}
NumberParse.prototype.parse = function(value) {
if (value === undefined || value === null) {
return 0;
}
value = value.replace(
new RegExp('\\s|[' + this.localeData.number.symbols.group + ']', 'g'),
''
);
if (value === '') {
return 0;
}
var ret = '';
var negative = false;
var hasDecimal = false;
var breakout = false;
for (var i = 0; i < value.length; i++) {
var c = value.charAt(i);
switch (c) {
case this.localeData.number.symbols.decimal:
ret += !hasDecimal ? '.' : '';
hasDecimal = true;
break;
case this.localeData.number.symbols.negative:
case '(':
case ')':
negative = true;
break;
default:
c = parseInt(c);
if (!isNaN(c) && c >= 0 && c <= 9) {
ret += c;
} else {
breakout = true;
}
}
if (breakout) {
break;
}
}
if (ret.length === 0) {
return NaN;
}
ret = parseFloat(ret);
if (negative) {
ret = ret * -1;
}
return ret;
};