Qt 4.7中QRegExp电子邮件地址验证

3

我有一个用于验证电子邮件地址的好的正则表达式模式。我已经在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);
}
2个回答

7

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

QString strPatt = "\\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,4}\\b";

谢谢,伙计。我知道这没什么大不了的,是我的错。我不小心在点号处打了双引号。无论如何,我遇到了一个Qt问题:通过#include <Qt>,Qt:CaseSensitivity枚举不在范围内,所以我使用了以下代码:QString strPatt = "\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}\b"; - Will
2
如果您想让您的正则表达式不区分大小写,就像C#示例中所示,请使用此构造函数。http://doc.qt.nokia.com/latest/qregexp.html#QRegExp-2 即QRegExp rx(strPatt,Qt::CaseInsensitive); 否则,您可能无法获得与C#程序完全相同的行为。 - O.C.
OrcunC,我试图使用setCaseSensitivity,但是对于那些枚举值,我遇到了作用域问题,我将改变构造函数。它现在已经适应了A-Za-z,谢谢 :) - Will

2

在这里,您可以使用内置函数来转义字符串:

QRegExp::escape(QSTRING_HERE)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接