📝 Forms & Validation in Web Development
Forms are the primary way users interact with websites — from signing up to submitting data. Validation ensures the data entered is correct, safe, and expected.
📦 Key Components of a Web Form
<form action="/submit" method="POST">
<label>Email:
<input type="email" name="email" required>
</label>
<label>Password:
<input type="password" name="password" minlength="6" required>
</label>
<button type="submit">Submit</button>
</form>
🔍 Common Input Types:
text
,email
,password
,checkbox
,radio
,file
,textarea
,number
,date
🧠 Types of Validation
Type | Description | Example |
---|---|---|
✅ HTML5 Validation | Built-in rules via attributes | required , type="email" , minlength |
✅ JavaScript Validation | Custom logic in the browser | Check password match |
✅ Server-Side Validation | Final validation for security | Prevents spoofing, SQL injection, etc. |
🔐 Always do server-side validation — never trust user input!
⚙️ HTML5 Built-In Validation
<input type="email" required>
<input type="password" minlength="8">
<input type="text" pattern="\d{4}" title="Enter 4 digits">
✅ Use
pattern
,min
,max
,maxlength
,required
for fast client-side rules.
🧰 JavaScript Form Validation Example
document.querySelector("form").addEventListener("submit", function (e) {
const email = document.querySelector("[name='email']").value;
if (!email.includes("@")) {
alert("Invalid email");
e.preventDefault(); // stop form submission
}
});
⚛️ React Form Validation (with react-hook-form
)
npm install react-hook-form
import { useForm } from "react-hook-form";
function App() {
const { register, handleSubmit, formState: { errors } } = useForm();
return (
<form onSubmit={handleSubmit(data => console.log(data))}>
<input {…register(“email“, { required: true })} />
{errors.email && <span>Email is required</span>}
<input type=“password” {…register(“password“, { minLength: 6 })} />
<button type=“submit”>Submit</button>
</form>
);
}
📑 Server-Side Validation Examples
✅ Node.js + Express + Joi
npm install joi
const Joi = require('joi');
const schema = Joi.object({
email: Joi.string().email().required(),
password: Joi.string().min(6).required()
});
app.post(‘/register’, (req, res) => {
const { error } = schema.validate(req.body);
if (error) return res.status(400).send(error.details[0].message);
// continue saving user
});
📚 Libraries for Validation
Library | Best For |
---|---|
Joi | Backend validation (Node.js) |
Yup | React + Formik + complex schemas |
react-hook-form | Lightweight React form handling |
Formik | Powerful form library for React |
Zod | TypeScript-first validation |
Validator.js | Small JavaScript validation utility |
✅ Best Practices
Always validate on client AND server
Sanitize data before sending to server
Use libraries for complex schemas
Provide helpful error messages (UX!)
Highlight invalid fields (with styles or ARIA attributes)