Regex for Indian Phone Numbers โ Validate Mobile and Landline Numbers
Indian phone numbers have specific patterns for mobile (10 digits starting with 6-9) and landline (STD code + number). Here are the right regex patterns.
Validating Indian phone numbers with regex is tricky because of the variety of formats in use. Numbers might come with country codes, with spaces, with hyphens, or with nothing extra at all. Here's a pattern that handles the common cases.
Indian mobile number rules
Indian mobile numbers are 10 digits and always start with 6, 7, 8, or 9. That's the core rule. Landline numbers have an STD code followed by the local number, making the total vary by city.
For mobile numbers specifically:
// Basic 10-digit mobile validation
const mobileRegex = /^[6-9]d{9}$/;
mobileRegex.test("9876543210") // true
mobileRegex.test("1234567890") // false (doesn't start with 6-9)
mobileRegex.test("98765432") // false (8 digits)
mobileRegex.test("98765432101") // false (11 digits)Handling country code prefix
Users often type or paste numbers with +91 or 91 at the start. Extend the pattern to handle that:
// Accepts: 9876543210, +919876543210, 919876543210, 0919876543210
const indianPhoneRegex = /^(?:(?:+|0{0,2})91[s-]?)?[6-9]d{9}$/;
indianPhoneRegex.test("9876543210") // true
indianPhoneRegex.test("+919876543210") // true
indianPhoneRegex.test("919876543210") // true
indianPhoneRegex.test("+91 98765 43210") // true (spaces allowed)
indianPhoneRegex.test("+44 7911 123456") // false (UK number)Normalizing before validation
Often the cleanest approach is to strip formatting first, then validate the cleaned number:
function validateIndianMobile(input) {
// Remove spaces, hyphens, parentheses, +91 or 91 prefix
const cleaned = input
.replace(/s|-|(|)/g, "") // remove formatting
.replace(/^(+91|91|0{1,2}91)/, ""); // remove country code
return /^[6-9]d{9}$/.test(cleaned);
}
validateIndianMobile("+91 98765-43210") // true
validateIndianMobile("0091-9876543210") // true
validateIndianMobile("1234567890") // falseNumber series by operator
If you need to distinguish operator-specific series, note that:
- Series starting 6x are typically newer allocations (Jio, Airtel, BSNL)
- Series starting 7x, 8x, 9x cover all major operators
- Number portability makes operator detection unreliable anyway
Test these patterns live with our Regex Tester.