正则表达式解析自定义电子邮件地址

时间:2013-09-05 16:29:01

标签: php regex email

我需要解析电子邮件自定义电子邮件地址,这些地址都符合以下类似的格式:

custom.name+1234@my.custom.domain

我需要一个正则表达式来捕获加号(+)之前的所有内容,加号之后的数字以及@符号之后的内容。电子邮件可以通过,也没有加号(+)。

我的第一个基本尝试看起来像这样,但显然是错误的:

preg_match('#([A-Za-z0-9._])+([\d])@(.*)#', 'customemail+123@domain.com', $matches);

3 个答案:

答案 0 :(得分:2)

问题是方括号表示单个字符。

如果你想允许多个这样的东西,你需要一个量词,如*为零或更多,或+为1或更多。

你需要转义加号,因为它用于我已经描述过的目的。另外我们需要使用?标记为可选?量词(表示零或一)。

所以我们最终得到的结果是:

'#([A-Za-z0-9._]+)\+?([\d]*)@(.*)#'

希望有所帮助

答案 1 :(得分:0)

我使用这个正则表达式:

'/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/'

但是如果只与2-4长度的tld兼容。因此它与“.company”等新的tld不兼容......所以如果你想与更长的tld兼容,只需将{2,4}更改为{2,10},最大长度为10个字符(只需使用长度)你想要的最长的tld。

答案 2 :(得分:0)

我会这样做:

([\w.]+)(?:\+(\d+))?@(.*)

组1将包含名称
第2组将包含+号后面的数字 第3组将包含域名。