Qt 4.7 QRegExp电子邮件地址验证

Wil*_*ill 3 c# c++ email validation qt

我有一个很好的正则表达式模式来验证电子邮件地址.我在php中使用它,我在C#中使用它,没有遇到任何问题(还没有).我很难在迁移模式并将其与qt的QRegExp一起使用时遇到相当大的麻烦.

谁能帮我?

// C# version
public bool isEmailAddress(string strEmailAddr)
{
    if (strEmailAddr.Length == 0)
        return false;

    Regex rTest = new Regex(@"\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b", RegexOptions.IgnoreCase);
    return rTest.Match(strEmailAddr).Success;
}

// #C++/Qt 4.7 version ... not working
bool isEmailAddress(QString strEmailAddr)
{
    if ( strEmailAddr.length() == 0 ) return false;

    QString strPatt = "\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,4}\b";
    QRegExp rx(strPatt);
    return rx.exactMatch(strEmailAddr);
}
Run Code Online (Sandbox Code Playgroud)

Kal*_*son 7

C#的原始字符串使它更容易编写,但由于你正在处理C++,你需要转义反斜杠:

QString strPatt = "\\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,4}\\b";
Run Code Online (Sandbox Code Playgroud)

  • 如果您希望正则表达式不区分大小写,如c#示例中所示,请使用此构造函数.http://doc.qt.nokia.com/latest/qregexp.html#QRegExp-2即QRegExp rx(strPatt,Qt :: CaseInsensitive); 否则你可能无法获得c#程序的确切行为. (2认同)