Skip to main content
← πŸ“„ HTML & the platformΒ·Module A3 Β· Lesson 5
TaskBuild a username + password form: username input with name='username', required, minlength=3, maxlength=20, pattern='[A-Za-z0-9_]+'. Password input with name='password', required, minlength=8.

required, pattern, minlength, maxlength

100 XP8 min
Theory

HTML validation attributes β€” your browser's Pydantic

<input required />                                   <!-- can't submit empty -->
<input minlength="8" maxlength="64" />               <!-- length constraints -->
<input pattern="[A-Za-z0-9_]{3,20}" />               <!-- regex match -->
<input pattern="^\+\d{10,15}$" title="E.164 phone format like +14155552671" />

The browser blocks submit and shows a native tooltip. `title=""` customizes that tooltip.

Mirror your Pydantic constraints

class User(BaseModel):
    username: str = Field(min_length=3, max_length=20, pattern=r"^[A-Za-z0-9_]+$")

Becomes:

<input name="username" required minlength="3" maxlength="20"
       pattern="[A-Za-z0-9_]{3,20}" title="3-20 letters, digits, or underscores" />

Same constraint expressed twice, intentionally β€” the browser blocks 95% of bad input before it ever hits your endpoint, saving you bandwidth and giving instant feedback. Your Pydantic still validates on the server because malicious clients skip the browser.

The pattern attribute uses JS regex

NOT PCRE. NOT Python re. JavaScript regex syntax β€” most things work, but \d\w\s lookarounds etc. behave slightly differently. Test in the browser, don't trust your Python regex to copy-paste cleanly.

πŸ”’

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.

← PreviousNext lesson β†’

Get one Python or web tip a day β€” by email

Short, hand-written, no spam. Unsubscribe in one click.