0

これと同様の形式にすべて適合する電子メールのカスタム電子メール アドレスを解析する必要があります。

custom.name+1234@my.custom.domain

プラス (+) 記号の前、プラス記号の後の数字、および @ 記号の後のすべてをキャプチャする正規表現が必要です。プラス (+) 記号のない電子メールが届く可能性もあります。

私の最初の基本的な試みは次のようになりますが、明らかに間違っています。

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

3 に答える 3

2

問題は、角括弧が単一の文字を示していることです。

これらを複数許可したい場合は、0 以上を表す * や 1 以上を表す + などの量指定子が必要です。

プラス記号は、既に説明した目的で使用されるため、エスケープする必要があります。また、? を使用してオプションとしてマークする必要があります。数量詞 (0 または 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 文字にします (長さを使用するだけです)。あなたが望む最長のTLDの)。

于 2013-09-05T16:35:53.580 に答える