JavaScript & PHP Regex Validation – Username, Email, Password & More
Regular expressions (Regex) are essential for validating user input in both JavaScript and PHP. Whether you are handling form submissions on the client-side or server-side, Regex ensures data is formatted correctly and meets specific requirements.
This page provides JavaScript and PHP functions for common validation tasks using Regex, including:
- Username Validation – Ensures valid usernames with specific character rules.
- Email Address Validation – Checks for properly formatted email addresses.
- Date Validation – Confirms correct date formats (YYYY-MM-DD, MM/DD/YYYY, etc.).
- Strong Password Validation – Requires uppercase, lowercase, numbers, and special characters.
- URL Link Validation – Ensures valid website URLs with http or https.
- Mobile Number Validation – Checks for valid phone number formats based on country codes.
Test the live demo to validate different inputs instantly.
Contents
Username validation regex JavaScript code (Starts with a lowercase letter, Can contain lowercase letters, numbers, and underscores, Length: 5 to 20 characters) and demo:
Demo:
JavaScript function username validation:
const validateUsername = (username) => {
/**
* Validates a username based on the following criteria:
* - Starts with a lowercase letter.
* - Can contain lowercase letters, numbers, and underscores.
* - Length: 5 to 20 characters.
*/
const regex = /^[a-z][a-z0-9_]{4,19}$/i;
return regex.test(username);
};
<label for="username">username</label>
<input id="username" type="text">
<span id="username-valid-message" style="display: block;color: red"></span>
<script>
document.getElementById("username").addEventListener("change", function() {
let username = this.value;
let message = document.getElementById("username-valid-message");
if (validateUsername(username)) {
message.innerText = '';
} else {
message.innerText = 'Invalid username. Allowed: a-z, 0-9, _, Length: 5-20';
}
});
</script>
PHP function username validation:
Email validation regex JavaScript and PHP code with demo:
Demo:
JavaScript function email validation:
const validateEmail = (email) => {
// Allows lowercase, uppercase, numbers, and common special characters.
const regex = /^[a-z0-9!#$%&'*+/=?^_`{|}~]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z]{2,}$/i;
return regex.test(email);
};
<label for="email">Email</label>
<input id="email" type="text">
<span id="email-valid-message" style="display: block;color: red"></span>
<script>
document.getElementById("email").addEventListener("change", function() {
let email = this.value;
let message = document.getElementById("email-valid-message");
if (validateEmail(email)) {
message.innerText = '';
} else {
message.innerText = 'Invalid Email Address';
}
});
</script>
PHP function email validation:
Date validation regex function JavaScript and PHP code with demo:
Demo:
JavaScript function date validation:
const validateDate = (date, format = "dd-mm-yyyy") => {
/**
* Validates a date based on format:
* - "yyyy-mm-dd" (ISO format)
* - "dd-mm-yyyy" (Common format)
*
* Ensures correct format and checks if the date actually exists.
*/
let regex, day, month, year;
if (format === "yyyy-mm-dd") {
regex = /^([1-9]\d{3})-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])$/;
const match = date.match(regex);
if (!match) return false;
[year, month, day] = match.slice(1);
} else if (format === "dd-mm-yyyy") {
regex = /^(0[1-9]|[12]\d|3[01])-(0[1-9]|1[0-2])-([1-9]\d{3})$/;
const match = date.match(regex);
if (!match) return false;
[day, month, year] = match.slice(1);
} else {
return false; // Unsupported format
}
return isValidDate(parseInt(day), parseInt(month), parseInt(year));
};
// Function to check if the date is actually valid
const isValidDate = (day, month, year) => {
const dateObj = new Date(year, month - 1, day);
return dateObj.getFullYear() === year &&
dateObj.getMonth() === month - 1 &&
dateObj.getDate() === day;
};
<label for="date">Date</label>
<input id="date" type="text">
<span id="date-valid-message" style="display: block;color: red"></span>
<script>
document.getElementById("date").addEventListener("change", function() {
let date = this.value;
let message = document.getElementById("date-valid-message");
if (validateDate(date, "dd-mm-yyyy")) {
message.innerText = '';
} else {
message.innerText = 'Invalid Date (dd-mm-yyyy)';
}
});
</script>
PHP function date validation:
<?php
function validateDate($date, $format = "dd-mm-yyyy") {
if ($format === "yyyy-mm-dd") {
$regex = "/^([1-9]\d{3})-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])$/";
if (!preg_match($regex, $date, $matches)) {
return false;
}
list(, $year, $month, $day) = $matches;
} elseif ($format === "dd-mm-yyyy") {
$regex = "/^(0[1-9]|[12]\d|3[01])-(0[1-9]|1[0-2])-([1-9]\d{3})$/";
if (!preg_match($regex, $date, $matches)) {
return false;
}
list(, $day, $month, $year) = $matches;
} else {
return false; // Unsupported format
}
return checkdate((int)$month, (int)$day, (int)$year);
}
// Example usage:
// validateDate("31-12-2023", "dd-mm-yyyy");
Strong password validation regex function JavaScript and PHP code with demo:
Demo:
JavaScript function password validation:
const validatePassword = (password) => {
// Ensure password is a string
password = String(password);
if (password.length < 8) {
return "Password must be at least 8 characters long.";
}
if (!/[0-9]/.test(password)) {
return "Password must contain at least one numeric digit.";
}
if (!/[a-z]/.test(password)) {
return "Password must contain at least one lowercase letter.";
}
if (!/[A-Z]/.test(password)) {
return "Password must contain at least one uppercase letter.";
}
if (!/[`~!@#$%^&*()\-_=+{}[\]:;"'<>,.?\/|\\]/.test(password)) {
return "Password must contain at least one special character.";
}
return true;
};
<label for="password">Password</label>
<input id="password" type="text">
<span id="password-valid-message" style="display: block;color: red"></span>
<script>
document.getElementById("password").addEventListener("change", function() {
let password = this.value;
let message = document.getElementById("password-valid-message");
let validate = validatePassword(password)
if (validate === true) {
message.innerText = '';
} else {
message.innerText = validate;
}
});
</script>
PHP function strong password validation:
<?php
function validatePassword($password) {
// Ensure password is treated as a string
$password = (string) $password;
if (strlen($password) < 8) {
return "Password must be at least 8 characters long.";
}
if (!preg_match('/[0-9]/', $password)) {
return "Password must contain at least one numeric digit.";
}
if (!preg_match('/[a-z]/', $password)) {
return "Password must contain at least one lowercase letter.";
}
if (!preg_match('/[A-Z]/', $password)) {
return "Password must contain at least one uppercase letter.";
}
if (!preg_match('/[`~!@#$%^&*()\-_=+{}[\]:;"\'<>,.?\/|\\\\]/', $password)) {
return "Password must contain at least one special character.";
}
return true;
}
// Example usage:
$password = "Test@123";
$result = validatePassword($password);
echo $result === true ? "Valid password" : $result;
URL link validation regex function JavaScript and PHP code with demo:
- Supports http, https, and www correctly.
- Ensures valid domain names and TLDs.
- Allows query strings, anchors, and common URL structures.
Demo:
JavaScript function URL link validation:
const validateURL = (url) => {
const regex = /^(https?:\/\/(?:www\.)?|www\.)[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}([\/?#].*)?$/;
return regex.test(url);
};
<label for="url">URL</label>
<input id="url" type="text">
<span id="url-valid-message" style="display: block;color: red"></span>
<script>
document.getElementById("url").addEventListener("change", function() {
let url = this.value;
let message = document.getElementById("url-valid-message");
if (validateURL(url)) {
message.innerText = '';
} else {
message.innerText = 'Invalid URL';
}
});
</script>
PHP function URL link validation:
Mobile number validation validation regex function JavaScript and PHP code with demo:
Matches common formats:
(123) 456-7890
123-456-7890
123.456.7890
1234567890
Demo:
JavaScript function mobile number validation:
const validateMobileNumber = (number) => {
number = String(number).trim();
// Regex to validate various formats: (123) 456-7890, 123-456-7890, 123.456.7890, 1234567890
const regex = /^(\(\d{3}\)|\d{3})[\-\.\s]?\d{3}[\-\.\s]?\d{4}$/;
return regex.test(number);
};
<label for="phone">Phone</label>
<input id="phone" type="text">
<span id="phone-valid-message" style="display: block;color: red"></span>
<script>
document.getElementById("phone").addEventListener("change", function() {
let phone = this.value;
let message = document.getElementById("phone-valid-message");
if (validateMobileNumber(phone)) {
message.innerText = '';
} else {
message.innerText = 'Invalid mobile number';
}
});
</script>
PHP function mobile number validation:
<?php
function isValidMobileNumber($number) {
// Ensure input is a string
$number = strval($number);
// Trim whitespace
$number = trim($number);
// Regex for valid formats
$pattern = '/^(\(\d{3}\)|\d{3})[\-\.\s]?\d{3}[\-\.\s]?\d{4}$/';
return preg_match($pattern, $number) === 1;
}
// Example usage
var_dump(isValidMobileNumber("(123) 456-7890")); // true
var_dump(isValidMobileNumber("123-456-7890")); // true
var_dump(isValidMobileNumber(1234567890)); // true
var_dump(isValidMobileNumber("invalid number")); // false
Demo form validation code HTML and JavaScript
Demo:
JavaScript function form validation:
const validateUsername = (username) => {
const regex = /^[a-z][a-z0-9_]{4,19}$/i;
return regex.test(username);
};
const validateEmail = (email) => {
const regex = /^[a-z0-9!#$%&'*+\-/=?^_`{|}~]+(?:\.[a-z0-9!#$%&'*+\-/=?^_`{|}~]+)*@(?:[a-z0-9]+(?:-[a-z0-9]+)*\.)+[a-z]{2,}$/i;
return regex.test(email);
};
const submitForm = (event) => {
event.preventDefault();
const username = document.querySelector('#username').value.trim();
const email = document.querySelector('#email').value.trim();
const usernameValidLabel = document.querySelector('#username-valid-label');
const emailValidLabel = document.querySelector('#email-valid-label');
usernameValidLabel.innerText = '';
emailValidLabel.innerText = '';
if (!validateUsername(username)) {
usernameValidLabel.innerText = 'Invalid username: Must be 5-20 characters, start with a letter, and contain only letters, numbers, or underscores.';
return;
}
if (!validateEmail(email)) {
emailValidLabel.innerText = 'Invalid email address format.';
return;
}
$.ajax({
url: 'https://your-domain.com/contact.php',
method: 'POST',
dataType: 'json',
data: {
username: username,
email: email
},
success: () => alert('Form submitted successfully!'),
error: (xhr) => {
console.error(`AJAX Error: ${xhr.status} - ${xhr.statusText}`);
alert('Submission failed. Please try again.');
}
});
};
document.querySelector('#demo-form').addEventListener('submit', submitForm);
<form id="demo-form" action="">
<label for="username">username</label>
<div>
<input id="username" class="input-text" type="text">
<span id="username-valid-label" style="display: block;color: red"></span>
</div>
<label for="email">email</label>
<div>
<input id="email" class="input-text" type="text">
<span id="email-valid-label" style="display: block;color: red"></span>
</div>
<br>
<input type="submit" value="submit">
</form>