我们已经使用正则表达式来验证RFC 2822标准。
功能如下:
int isValidEmail(const char *email_id)
{
/* Regular expression to validate email */
const char *reg_exp =
"[a-z0-9!#$%&'*+-/=?^_`{|}~]+(\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@([a-z0-9]([a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9]([a-z0-9-]*[a-z0-9])?$";
regex_t preg;
/* Compile the regular expression */
if (regcomp(&preg, reg_exp, REG_EXTENDED|REG_NOSUB|REG_ICASE) != 0)
return FAILURE;
/* Execute the regex, 0 for success */
if (regexec(&preg, email_id, (size_t)0, NULL, 0) != 0)
return FAILURE;
regfree(&preg);
return SUCCESS;
}
但如果我提供“test @ test @ test.com”等电子邮件,电子邮件将被接受。
这个正则表达式有问题吗?
提前感谢帮助。
谢谢, Mathew Liju
答案 0 :(得分:7)
在正则表达式的开头添加^
。它匹配行的开头。没有^
正则表达式将匹配子字符串test@test.com
,因为它是与正则表达式匹配的有效电子邮件ID。
答案 1 :(得分:1)
您的第一个字符类包含序列+-/
,它被视为范围。除了这三个字符,范围将匹配句号或逗号,我很确定你不想要。您应该将连字符移动到类的末尾,就像在所有其他类中一样。
这是我在正则表达式中看到的唯一结构性问题。至于它是否是电子邮件地址的正确正则表达式,那么,没有这样的事情。根据上下文和正在使用的正则表达式做什么,有很大的变化。谈到电子邮件地址正则表达式,你总是飞行的座位。 :P
答案 2 :(得分:0)
尝试将起始锚^
添加为:
"^[a-z0-9!#$%&'*+-/=?^_`{|}~]+(\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@([a-z0-9]([a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9]([a-z0-9-]*[a-z0-9])?$";