2012-04-13 16 views
0

私はSOにいくつかの電子メールの正規表現がありますが、私の場合に合ったものは何も見つかりませんでした。電子メールアドレスtld regex

私たちは、この正規表現で失敗している電子メールシステムを持っている:

形式の電子メールアドレスに電子メールで送信しようとして
if (!ereg("^\[?[0-9\.]+\]?$", $email_array[1])) { 
     $domain_array = explode(".", $email_array[1]); 
     if (sizeof($domain_array) < 2) { 
      $this->result = 0; 
     } 
     for ($i = 0; $i < sizeof($domain_array); $i++) { 
      if 
(!ereg("^(([A-Za-z0-9][A-Za-z0-9-]{0,61}[A-Za-z0-9])|?([A-Za-z0-9]+))$", 
    $domain_array[$i])) { 
      $this->result = 0; 
      } 
     } 
     } 

[email protected] 

私はそれが余分.VALUEだと仮定します。それは問題を引き起こしていると私は非常にこれを修正する正規表現で経験していないよ。誰も助けることができますか?

正規表現..事前に

^(([A-Za-z0-9][A-Za-z0-9-]{0,61}[A-Za-z0-9])|?([A-Za-z0-9]+))$ 

感謝。

+3

のちょうど最後の部分でなければなりませんhttp://stackoverflow.com/questions/201323/how-to-use-a-regular-expression-to-を参照してください。電子メールアドレスの検証。電子メールアドレスの検証に正規表現を使用しないでください。 –

+0

ライブシステムの修正には必要ですが、この段階で変更する機会はあまりありません。 – ChelseaStats

+0

eregは廃止されました:http:// php。net/manual/en/function.ereg.php – Toto

答えて

1

正規表現:

^(([A-Za-z0-9][A-Za-z0-9-]{0,61}[A-Za-z0-9])|?([A-Za-z0-9]+))$ 

は、ドメイン名の個々の部分と一致する必要があります。右?

ドメイン名にsome-text.value.subdomain.domain.co.ukがある場合。

コードはドットで分割され、各サブパーツと一致するように試みます。

したがって、たとえば一部のテキストまたはサブドメインです。

これは上の正規表現で正常に動作します。ちょうどの後|は、正規表現エンジンの気を散らしています。

私の代わりに

^(([A-Za-z0-9][A-Za-z0-9-]{0,61}[A-Za-z0-9])|([A-Za-z0-9]+))$ 

をしようとするだろう。

まだドメイン名の個々の部分にマッチする良い正規表現ではありませんが。 しかし、あなたはコードベースでできるだけ変更したくないと思います。

より良い1は交代

^[A-Za-z0-9-]+$ 
1

電子メールの検証をお探しの場合は、filter_var()関数に頼らざるを得ません。この関数は正規表現imhoよりも優れています。

filter_var('[email protected]', FILTER_VALIDATE_EMAIL); 
+1

'filter_var()'のソースコードを見れば、その正規表現も正規表現になっていることがわかります –

+0

Ofcourseでもコード内に独自の正規表現を書いています。 – ChrisR

+0

はい、その機能は動作しません正規表現よりも優れているのは、**正規表現だからです。それは** OPの**正規表現よりもうまく動作する正規表現を使用します。 –

1

それとも、この正規表現を使用できます。

^([0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*@([0-9a-zA-Z][-\w]*[0-9a-zA-Z]\.)+[a-zA-Z]{2,9})$ 

それはあなたの指定したメールと一致し、それらのほとんどで動作します(99.99%かそこらを)

関連する問題