使用正则表达式验证电子邮件和电话字段Qt

时间:2018-02-07 18:35:14

标签: c++ regex qt

我尝试使用正则表达式验证电子邮件和电话字段(字段为QLineEdit)。

我使用以下示例:

QString expression = "[1-9]\\d{0,3}";
QRegularExpression rx(expression);
QValidator *validator = new QRegularExpressionValidator(rx, this);

QLineEdit *edit = new QLineEdit(this);
edit->setValidator(validator);

我使用以下表达式来验证它:

const QString Phone = "/^\+?(\d.*){3,}$/";
const QString Email = "/^.+@.+$/";

这些表达式来自本网站:https://projects.lukehaas.me/regexhub/

但它没有按预期工作,因为它阻止'电子邮件和电话字段的任何输入。

我应该使用哪些正则表达式来验证这些字段?

请注意,我不需要进行更精确的验证。我基本上需要这个:

电子邮件:任何内容,@标记,任何内容,点,任何内容。例如: user@email.com user_123@email.com.br

电话:任意数字和以下字符")(+ - "。

2 个答案:

答案 0 :(得分:1)

您必须删除周围的/ 你必须修复转义,使用原始字符串可能会有所帮助:

const QString Phone = R"(^\+?(\d.*){3,}$)";
const QString Email = R"(^.+@.+$)";

有更多正确的regexp来验证手机/邮件btw。

答案 1 :(得分:0)

我创建了以下表达式来验证它:

// ((\\+?(\\d{2}))\\s?)? Matches for example +55 or 55 (optional) and an optional whitespace
// ((\\d{2})|(\\((\\d{2})\\))\\s?)? Matches for example 11 or (11) (optional) and an optional whitespace
// (\\d{3,15}) Matches at least 3 digits and at most 15 digits (required)
// (\\-(\\d{3,15}))? Matches exactly a dash and at least 3 digits and at most 15 digits (optional)
// E.g.: 1234-5678
// E.g.: 11 1234-5678
// E.g.: 11 91234-5678
// E.g.: (11) 1234-5678
// E.g.: +55 11 91234-5678
// E.g.: +55 (11) 91234-5678
// E.g.: 5511912345678
const QString Phone = "^((\\+?(\\d{2}))\\s?)?((\\d{2})|(\\((\\d{2})\\))\\s?)?(\\d{3,15})(\\-(\\d{3,15}))?$";

// [A-Z0-9a-z._-]{1,} Matches one or more occurrences of that digits (including ., _ and -)
// @ Matches exactly one @ character
// (\\.(\\w+)) Matches exactly one dot and one or more word character (e.g. ".com")
// (\\.(\\w+))? Matches one dot and one or more word character (e.g. ".br") (optional)
// E.g.: user@email.com
// E.g.: user_468@email.com.br
const QString Email = "^[A-Z0-9a-z._-]{1,}@(\\w+)(\\.(\\w+))(\\.(\\w+))?(\\.(\\w+))?$";