Skip to content
This repository was archived by the owner on Apr 12, 2024. It is now read-only.

Commit ebd0fbb

Browse files
committed
fix(forms): parse exponential notation in numberInputType parser
Support parsing numbers in exponential notation, which Number.prototype.toString() returns for sufficiently high numbers. Closes #12121 Closes #12122
1 parent 093416f commit ebd0fbb

File tree

2 files changed

+66
-1
lines changed

2 files changed

+66
-1
lines changed

src/ng/directive/input.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
var ISO_DATE_REGEXP = /\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z)/;
1414
var URL_REGEXP = /^(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?$/;
1515
var EMAIL_REGEXP = /^[a-z0-9!#$%&'*+\/=?^_`{|}~.-]+@[a-z0-9]([a-z0-9-]*[a-z0-9])?(\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$/i;
16-
var NUMBER_REGEXP = /^\s*(\-|\+)?(\d+|(\d*(\.\d*)))\s*$/;
16+
var NUMBER_REGEXP = /^\s*(\-|\+)?(\d+|(\d*(\.\d*)))([eE][+-]?\d+)?\s*$/;
1717
var DATE_REGEXP = /^(\d{4})-(\d{2})-(\d{2})$/;
1818
var DATETIMELOCAL_REGEXP = /^(\d{4})-(\d\d)-(\d\d)T(\d\d):(\d\d)(?::(\d\d)(\.\d{1,3})?)?$/;
1919
var WEEK_REGEXP = /^(\d{4})-W(\d\d)$/;

test/ng/directive/inputSpec.js

+65
Original file line numberDiff line numberDiff line change
@@ -1917,6 +1917,71 @@ describe('input', function() {
19171917
});
19181918

19191919

1920+
it('should parse exponential notation', function() {
1921+
var inputElm = helper.compileInput('<input type="number" name="alias" ng-model="value" />');
1922+
1923+
// #.###e+##
1924+
$rootScope.form.alias.$setViewValue("1.23214124123412412e+26");
1925+
expect(inputElm).toBeValid();
1926+
expect($rootScope.value).toBe(1.23214124123412412e+26);
1927+
1928+
// #.###e##
1929+
$rootScope.form.alias.$setViewValue("1.23214124123412412e26");
1930+
expect(inputElm).toBeValid();
1931+
expect($rootScope.value).toBe(1.23214124123412412e26);
1932+
1933+
// #.###e-##
1934+
$rootScope.form.alias.$setViewValue("1.23214124123412412e-26");
1935+
expect(inputElm).toBeValid();
1936+
expect($rootScope.value).toBe(1.23214124123412412e-26);
1937+
1938+
// ####e+##
1939+
$rootScope.form.alias.$setViewValue("123214124123412412e+26");
1940+
expect(inputElm).toBeValid();
1941+
expect($rootScope.value).toBe(123214124123412412e26);
1942+
1943+
// ####e##
1944+
$rootScope.form.alias.$setViewValue("123214124123412412e26");
1945+
expect(inputElm).toBeValid();
1946+
expect($rootScope.value).toBe(123214124123412412e26);
1947+
1948+
// ####e-##
1949+
$rootScope.form.alias.$setViewValue("123214124123412412e-26");
1950+
expect(inputElm).toBeValid();
1951+
expect($rootScope.value).toBe(123214124123412412e-26);
1952+
1953+
// #.###E+##
1954+
$rootScope.form.alias.$setViewValue("1.23214124123412412E+26");
1955+
expect(inputElm).toBeValid();
1956+
expect($rootScope.value).toBe(1.23214124123412412e+26);
1957+
1958+
// #.###E##
1959+
$rootScope.form.alias.$setViewValue("1.23214124123412412E26");
1960+
expect(inputElm).toBeValid();
1961+
expect($rootScope.value).toBe(1.23214124123412412e26);
1962+
1963+
// #.###E-##
1964+
$rootScope.form.alias.$setViewValue("1.23214124123412412E-26");
1965+
expect(inputElm).toBeValid();
1966+
expect($rootScope.value).toBe(1.23214124123412412e-26);
1967+
1968+
// ####E+##
1969+
$rootScope.form.alias.$setViewValue("123214124123412412E+26");
1970+
expect(inputElm).toBeValid();
1971+
expect($rootScope.value).toBe(123214124123412412e26);
1972+
1973+
// ####E##
1974+
$rootScope.form.alias.$setViewValue("123214124123412412E26");
1975+
expect(inputElm).toBeValid();
1976+
expect($rootScope.value).toBe(123214124123412412e26);
1977+
1978+
// ####E-##
1979+
$rootScope.form.alias.$setViewValue("123214124123412412E-26");
1980+
expect(inputElm).toBeValid();
1981+
expect($rootScope.value).toBe(123214124123412412e-26);
1982+
});
1983+
1984+
19201985
describe('min', function() {
19211986

19221987
it('should validate', function() {

0 commit comments

Comments
 (0)