C++11標准 STL正則表達式 驗證電子郵件地址


  我們最經常遇到的驗證,就是電子郵件地址驗證。網站上常見。各種網頁腳本也都常用“正則表達式”(regular expression)對我們輸入的電子郵件地址進行驗證,判斷是否合法。有的還能分解出用戶名和域名。現在用C++語言實現一下電子郵件地址驗證程序,用的是C++ 11標准新增加的STL正則表達式。

  源代碼如下,該代碼已在Visual Studio 2010上驗證通過。g++ 4.6不支持C++ 11STL正則表達式,g++ 4.6上編譯可以通過,但運行時錯誤,拋出regex_error異常。因此,如果要在g++ 4.6上使用正則表達式,請用GNU正則表達式庫或者用boost正則表達式庫。

/*
 * regex.cpp - 用正則表達式驗證電子郵件地址
 *
 *  C++11標准  STL正則表達式
 *
 *
 *              Copyright  葉劍飛 2012
 *
 * 編譯命令:
 *         cl regex.cpp /EHsc /link /out:regex.exe
 *
 */

#include <iostream>
#include <cstdlib>
#include <string>
#include <regex>  // regular expression 正則表達式

using namespace std;

int main ( )
{
    string email_address;
    string user_name, domain_name;

    regex pattern("([0-9A-Za-z\\-_\\.]+)@([0-9a-z]+\\.[a-z]{2,3}(\\.[a-z]{2})?)");
    // 正則表達式,匹配規則:
    // 第1組(即用戶名),匹配規則:0至9、A至Z、a至z、下划線、點、連字符之中
    // 的任意字符,重復一遍或以上
    // 中間,一個“@”符號
    // 第二組(即域名),匹配規則:0至9或a至z之中的任意字符重復一遍或以上,
    // 接着一個點,接着a至z之中的任意字符重復2至3遍(如com或cn等),
    // 第二組內部的一組,一個點,接着a至z之中的任意字符重復2遍(如cn或fr等)
    // 內部一整組重復零次或一次


    // 輸入文件結尾符(Windows用Ctrl+Z,UNIX用Ctrl+D)結束循環
    while ( cin >> email_address ) 
    {
        if ( regex_match( email_address, pattern ) )
        {
            cout << "您輸入的電子郵件地址合法" << endl;

            // 截取第一組
            user_name = regex_replace( email_address, pattern, string("$1") );

            // 截取第二組
            domain_name = regex_replace( email_address, pattern, string("$2") );

            cout << "用戶名:" << user_name << endl;
            cout << "域名:" << domain_name << endl;
            cout << endl;
        }
        else
        {
            cout << "您輸入的電子郵件地址不合法" << endl << endl;
        }
    }
    return EXIT_SUCCESS;
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM