0

我需要解析与此类似的格式的电子邮件自定义电子邮件地址:

custom.name+1234@my.custom.domain

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

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

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

3 回答 3

2

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

如果你想允许不止一个这些东西,你需要一个量词,比如 * 表示零或更多,或者 + 表示 1 或更多。

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

所以我们最终会得到类似的东西:

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

希望有帮助

于 2013-09-05T16:48:42.447 回答
0

我会做:

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

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

于 2013-09-06T07:59:19.833 回答
0

我使用这个正则表达式:

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

但 if 仅与 2-4 个字符长度的 tld 兼容。因此它与“.company”之类的新 tld 不兼容......因此,如果您想与更长的 tld 兼容,只需将 {2,4} 更改为 {2,10} 即可获得 10 个字符的最大长度(只需使用 length您想要的最长的 tld)。

于 2013-09-05T16:35:53.580 回答