Check if given email address is valid or not in C++
Given a string email that denotes an Email Address, the task is to check if the given string is a valid email id or not. If found to be true, then print “Valid”. Otherwise, print “Invalid”. A valid email address consists of an email prefix and an email domain, both in acceptable formats:
- The email address must start with a letter (no numbers or symbols).
- There must be an @ somewhere in the string that is located before the dot.
- There must be text after the @ symbol but before the dot.
- There must be a dot and text after the dot.
Examples:
Input: email = “contribute@geeksforgeeks.org”
Output: Valid
Explanation:
The given string follow all the criteria for an valid email string.Input: email = “contribute@geeksforgeeks..org”
Output: Invalid
String Traversal based Approach: Follow the steps below:
- Check if the first character of the email id string is an alphabet or not. If not, then the email is Invalid.
- Now traverse over the string email to find the position the “@” and “.” If “@” or “.” is not present then the email is Invalid.
- If “.” is not present after “@” then the email is Invalid.
- If “.” is the last character of the string email then the email id is Invalid.
- Otherwise, the email is Valid.
Below is the implementation of the above approach:
C++
// C++ program for the above approach #include <bits/stdc++.h> using namespace std; // Function to check the character // is an alphabet or not bool isChar( char c) { return ((c >= 'a' && c <= 'z' ) || (c >= 'A' && c <= 'Z' )); } // Function to check the character // is an digit or not bool isDigit( const char c) { return (c >= '0' && c <= '9' ); } // Function to check email id is // valid or not bool is_valid(string email) { // Check the first character // is an alphabet or not if (!isChar(email[0])) { // If it's not an alphabet // email id is not valid return 0; } // Variable to store position // of At and Dot int At = -1, Dot = -1; // Traverse over the email id // string to find position of // Dot and At for ( int i = 0; i < email.length(); i++) { // If the character is '@' if (email[i] == '@' ) { At = i; } // If character is '.' else if (email[i] == '.' ) { Dot = i; } } // If At or Dot is not present if (At == -1 || Dot == -1) return 0; // If Dot is present before At if (At > Dot) return 0; // If Dot is present at the end return !(Dot >= (email.length() - 1)); } // Driver Code int main() { // Given string email string email = "contribute@geeksforgeeks.org" ; // Function Call bool ans = is_valid(email); // Print the result if (ans) { cout << email << " : " << "valid" << endl; } else { cout << email << " : " << "invalid" << endl; } return 0; } |
contribute@geeksforgeeks.org : valid
Time Complexity: O(N)
Auxiliary Space: O(1)
Regular Expression based Approach: The given problem can also be solved using Regular Expression. Below are the steps:
- Get the email string.
- Create a regular expression to check the valid email as mentioned below:
regex = “(\\w+)(\\.|_)?(\\w*)@(\\w+)(\\.(\\w+))+”
- Match the given string email with the regular expression. In C++, this can be done by using regex_match().
- Print “Valid” if the given string email matches with the given regular expression, else return “Invalid”.
Below is the implementation of the above approach:
C++
// C++ program for the above approach #include <iostream> #include <regex> using namespace std; // Function to check the email id // is valid or not bool isValid( const string& email) { // Regular expression definition const regex pattern( "(\\w+)(\\.|_)?(\\w*)@(\\w+)(\\.(\\w+))+" ); // Match the string pattern // with regular expression return regex_match(email, pattern); } // Driver Code int main() { // Given string email string email = "contribute@geeksforgeeks.org" ; // Function Call bool ans = isValid(email); // Print the result if (ans) { cout << email << " : " << "valid" << endl; } else { cout << email << " : " << "invalid" << endl; } } |
contribute@geeksforgeeks.org : valid
Time Complexity: O(N)
Auxiliary Space: O(1)
Please Login to comment...