TaskBuild a product form: <input name='quantity' type='number' min='1' max='99' step='1'> and <input name='price' type='number' min='0' step='0.01'>.
<input type=number>: min, max, step
75 XP6 min
Theory
Numeric inputs in HTML
<input type="number" name="age" min="13" max="120" step="1" /> <input type="number" name="price" min="0" step="0.01" /> <input type="range" name="volume" min="0" max="100" step="5" value="50" />
type="number"β text-style input with up/down spinners. Decimal allowed withstep="0.01"(or any fractional step).type="range"β a slider. No text typing. Good for "set volume" / "pick a year between 1900-2026."
Pydantic parallel
class SignupForm(BaseModel):
age: int = Field(ge=13, le=120) # >= 13, <= 120
price: Decimal = Field(ge=0)Your HTML min="13" max="120" mirrors the Pydantic ge=13 le=120. Same validation, two layers: browser blocks bad input, backend re-validates. Never trust browser-only β XSS can submit anything.
Negative numbers
min="-100" works. step="any" allows arbitrary precision.
Why not type="text" + pattern="\d+"?
You could. But type="number" gives you:
- Number-pad keyboard on mobile (matters more than you think).
- Up/down arrow spinners on desktop.
- Native validation tooltip in the user's language.
type="text" would give you none of these.
π
Sign up to start coding
Theory is open to everyone. The interactive editor, live preview, and check are unlocked with a 7-day free trial β card required, cancel anytime.
Sign up β free trial βFirst 10 lessons in each track are free. No card needed for those.