我尝试使用正则表达式验证电子邮件和电话字段(字段为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
电话:任意数字和以下字符")(+ - "。
答案 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+))?$";