diff --git a/packages/web-components/fast-foundation/src/number-field/number-field.pw.spec.ts b/packages/web-components/fast-foundation/src/number-field/number-field.pw.spec.ts index 6c993f8b2d6..babfeffe309 100644 --- a/packages/web-components/fast-foundation/src/number-field/number-field.pw.spec.ts +++ b/packages/web-components/fast-foundation/src/number-field/number-field.pw.spec.ts @@ -333,6 +333,24 @@ test.describe("NumberField", () => { await expect(control).toHaveValue(""); }); + test("should allow only one e entry", async ({ page }) => { + const value = "11e111e1e1e1e1e1"; + + const expectedValue = "11e11111111"; + + await page.goto(fixtureURL("number-field--number-field")); + + const element = page.locator("fast-number-field"); + + const control = element.locator(".control"); + + await element.type(value); + + await expect(element).toHaveJSProperty("value", expectedValue); + + await expect(control).toHaveValue(expectedValue); + }); + test('should set the `step` property to "1" by default', async () => { await root.evaluate(node => { node.innerHTML = /* html */ ` diff --git a/packages/web-components/fast-foundation/src/number-field/number-field.ts b/packages/web-components/fast-foundation/src/number-field/number-field.ts index dc6a0f0352e..12bdbf9d479 100644 --- a/packages/web-components/fast-foundation/src/number-field/number-field.ts +++ b/packages/web-components/fast-foundation/src/number-field/number-field.ts @@ -339,7 +339,7 @@ export class FASTNumberField extends FormAssociatedNumberField { * @internal */ public handleTextInput(): void { - this.field.value = this.field.value.replace(/[^0-9\-+e.]/g, ""); + this.control.value = this.control.value.replace(/[^0-9\-+e.]|(?<=e.*)e/g, ""); this.isUserInput = true; this.value = this.field.value; } @@ -354,6 +354,18 @@ export class FASTNumberField extends FormAssociatedNumberField { * @internal */ public handleChange(): void { + this.value = this.value.toLowerCase(); + this.value = this.value.replace(/(?<=e.*)e/g, ""); + const parts = this.value.split("e"); + if (parts.length > 1) { + let base = parts[0]; + let exponent = parts[1]; + + base = base === "" && exponent !== "" ? "0" : base; + exponent = exponent.replace(/[^0-9\-+]/g, ""); + this.value = base + (exponent !== "" ? "e" + exponent : ""); + this.control.value = this.value; + } this.$emit("change"); }