Common validation patterns in PHP - Time & Space Complexity
When checking data for correctness, we often run validation steps. Understanding how long these checks take helps us write faster programs.
We want to know how the time to validate grows as the data size grows.
Analyze the time complexity of the following code snippet.
function validateEmails(array $emails) {
foreach ($emails as $email) {
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
return false;
}
}
return true;
}
This code checks if every email in a list is valid, stopping early if any email is invalid.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: Looping through each email to validate it.
- How many times: Up to once per email, stopping early if invalid.
As the number of emails grows, the checks grow roughly the same amount, unless an invalid email appears early.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | Up to 10 validations |
| 100 | Up to 100 validations |
| 1000 | Up to 1000 validations |
Pattern observation: The work grows linearly with the number of emails.
Time Complexity: O(n)
This means the time to validate grows directly with the number of emails.
[X] Wrong: "Validation always takes the same time no matter how many inputs there are."
[OK] Correct: Each input needs checking, so more inputs usually mean more work.
Understanding how validation time grows helps you write efficient checks and explain your code clearly in interviews.
"What if we changed the validation to check only the first 5 emails regardless of list size? How would the time complexity change?"
Practice
Which PHP function is commonly used to validate if a string is a valid email address?
Solution
Step 1: Understand email validation in PHP
PHP provides a built-in filter called FILTER_VALIDATE_EMAIL to check if a string is a valid email.Step 2: Identify the correct function usage
filter_var with FILTER_VALIDATE_EMAIL returns the email if valid, or false if invalid.Final Answer:
filter_var with FILTER_VALIDATE_EMAIL -> Option BQuick Check:
Email validation = filter_var with FILTER_VALIDATE_EMAIL [OK]
- Using preg_match with wrong regex for email
- Checking length instead of format
- Using string functions unrelated to validation
Which of the following is the correct syntax to validate a URL using filter_var in PHP?
?Solution
Step 1: Identify the filter for URL validation
FILTER_VALIDATE_URL is the correct filter to check if a string is a valid URL.Step 2: Confirm correct function call
filter_var takes the variable and the filter constant as parameters.Final Answer:
filter_var($url, FILTER_VALIDATE_URL); -> Option CQuick Check:
URL validation = filter_var with FILTER_VALIDATE_URL [OK]
- Using FILTER_VALIDATE_EMAIL for URLs
- Using integer or boolean filters incorrectly
- Missing the filter parameter
What will be the output of the following PHP code?
$phone = '123-456-7890';
if (preg_match('/^\d{3}-\d{3}-\d{4}$/', $phone)) {
echo 'Valid phone';
} else {
echo 'Invalid phone';
}Solution
Step 1: Analyze the regex pattern
The pattern /^\d{3}-\d{3}-\d{4}$/ matches exactly 3 digits, a dash, 3 digits, a dash, then 4 digits.Step 2: Check the input string against the pattern
The string '123-456-7890' matches this pattern exactly.Final Answer:
Valid phone -> Option DQuick Check:
Regex matches phone format = Valid phone [OK]
- Forgetting anchors ^ and $ in regex
- Using wrong quantifiers in regex
- Not escaping special characters
Identify the error in this PHP code snippet for validating an integer:
$num = '123a';
if (filter_var($num, FILTER_VALIDATE_INT)) {
echo 'Valid integer';
} else {
echo 'Invalid integer';
}Solution
Step 1: Understand filter_var with FILTER_VALIDATE_INT
This filter returns the integer value if valid, or false if invalid.Step 2: Check input '123a'
The string '123a' is not a valid integer, so filter_var returns false.Final Answer:
filter_var returns false for '123a', so output is 'Invalid integer' -> Option AQuick Check:
Invalid integer string returns false = 'Invalid integer' output [OK]
- Using FILTER_VALIDATE_NUMBER which does not exist
- Casting before validation causing wrong results
- Assuming filter_var always returns boolean
You want to validate a username in PHP that must start with a letter, can contain letters, numbers, underscores, and be 5 to 15 characters long. Which preg_match pattern correctly validates this?
Solution
Step 1: Understand username requirements
Username must start with a letter, then 4 to 14 characters of letters, digits, or underscores, total length 5-15.Step 2: Analyze each pattern
/^[a-zA-Z][a-zA-Z0-9_]{4,14}$/ matches a letter at start, then 4-14 allowed chars, total 5-15 length. Others fail start or length rules.Final Answer:
/^[a-zA-Z][a-zA-Z0-9_]{4,14}$/ -> Option AQuick Check:
Start letter + allowed chars + length 5-15 = /^[a-zA-Z][a-zA-Z0-9_]{4,14}$/ [OK]
- Allowing digits as first character
- Not enforcing length limits
- Missing anchors ^ and $
Ready to prove it?
Pass the test and this pattern moves unknown
