You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Qt中使用正则验证QLineEdit邮箱与手机号输入问题咨询

基础邮箱与手机号正则验证方案(适配QLineEdit实时输入)

我懂你遇到的问题了——之前用的正则太严格,导致用户输入过程中每一步都被判定为无效,直接锁死输入框对吧?毕竟QLineEdit的实时验证会在每敲一个字符时检查,那种要求完全匹配最终格式的正则肯定不适合输入过程。给你两套适配实时输入的基础验证正则,刚好满足你的需求:

一、基础邮箱验证正则

基础需求的话,咱们只需要确保输入符合“前缀@域名.后缀”的大致结构就行,不用纠结复杂的域名规则。下面这个正则支持用户逐步输入(比如先输前缀、再输@、再输域名的过程都不会被拦截):

^[A-Za-z0-9._%+-]*@?[A-Za-z0-9.-]*\.?[A-Za-z]*$

简单解释下规则:

  • 允许前缀输入合法字符(字母、数字、._%+-),可以为空(方便用户先敲@)
  • @? 表示@符号可选(用户输入到@之前的状态也合法)
  • 域名部分允许字母、数字、.-,同样可以为空
  • 后缀的点号和字母都可选,适配用户还没输完后缀的情况

如果想要稍微严格一点(比如要求前缀至少有一个字符),可以用这个:

^[A-Za-z0-9._%+-]+@?[A-Za-z0-9.-]*\.?[A-Za-z]{2,}?$

这里把前缀的*改成+,强制前缀至少有一个字符,后缀要求至少2个字符但暂时允许为空(方便输入过程)。

二、基础手机号验证正则

针对国内手机号的话,基础规则就是1开头,第二位是3-9,后面跟着9位数字。下面这个正则支持实时输入:

^1[3-9]?[0-9]{0,9}$

解释:

  • 强制以1开头
  • [3-9]? 允许第二位暂时为空(用户刚输入1时不会被拦截)
  • [0-9]{0,9} 允许后面输入0到9位数字,完美适配从1位到11位的输入过程

如果需要支持带国际区号(比如+86)的情况,用这个:

^(\+86)?1?[3-9]?[0-9]{0,9}$

允许开头的+86可选,也允许用户先输区号再输手机号。

三、QLineEdit里的使用小技巧

别直接用完全匹配的正则硬套,要用QRegExpValidator来做实时验证,它会允许输入过程中的中间状态。举个代码例子:

// 邮箱输入框验证
QRegExp emailRegex("^[A-Za-z0-9._%+-]*@?[A-Za-z0-9.-]*\\.?[A-Za-z]*$");
QRegExpValidator *emailValidator = new QRegExpValidator(emailRegex, this);
ui->emailLineEdit->setValidator(emailValidator);

// 手机号输入框验证
QRegExp phoneRegex("^1[3-9]?[0-9]{0,9}$");
QRegExpValidator *phoneValidator = new QRegExpValidator(phoneRegex, this);
ui->phoneLineEdit->setValidator(phoneValidator);

要是你想在用户输入完成(比如输入框失去焦点)时做最终的严格检查,可以再用一套完全匹配的正则二次验证:

  • 邮箱完全匹配:^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$
  • 手机号完全匹配:^1[3-9][0-9]{9}$

内容的提问来源于stack exchange,提问作者KelvinS

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 04:21:34