2012-03-05 10 views
0

私は[email protected]の形式、またはまたは[email protected]などのサブドメインを使用して、当社の電子メールを検証するためにPHP preg_match関数を使用しています。特定のドメインの電子メールが正しく動作しないことを検証する正規表現はなぜですか?

return (preg_match("/^[a-zA-Z0-9_-.+][email protected][a-zA-Z0-9-]+.[a-zA-Z]+(\.?mycompany\.com)$/", $testEmail) > 0) 

ただし、前述のすべての例では、validEmail関数はfalseを返します。どうして?

+0

* all *の場合はfalseを返しますか?私は 'user @ mycompany.com'と' user @ it.mycompany.com'(なぜなら、 '@'と '\。?mycompany \の間に十分な文字がないのでfalseを返すのがわかります。私はそれが 'user @ marketing.mycompany.com'のために働くことを期待していました。 。 。 – ruakh

+0

私はそれが実際に彼らのために働くとは思わない。私はちょうどそれをテストした。 – dangerChihuahua007

答えて

2
^[a-zA-Z0-9_.+-][email protected](?:(?:[a-zA-Z0-9-]+\.)?[a-zA-Z]+\.)?mycompany\.com$ 
  • 3番目と4番目のレベルのドメインがなされていなかったオプション(()?)あなたは.を脱出するのを忘れmycompany.comと@ onesubonly.mycompany.com
  • @何かを除外しています
  • My Syntaxのチェックでは、最初の文字クラスのエスケープされていないダッシュが気に入らないのですが、それは私の知識がどこにあるかは関係ありません。

電子メールの正規表現のトピックに関する楽しいもの(「.. @ mycompany.com」などがあなたを渡す見て): http://www.ex-parrot.com/pdw/Mail-RFC822-Address.html

2

.-をエスケープするのを忘れてしまったためです。また、"@"mycompany.comの間の文字ブロックを作成しないと、[email protected]と一致する問題が発生しました。試してみてください:

return (preg_match("/^[a-zA-Z0-9_\-.+][email protected](?:[a-zA-Z0-9\-]+(?:\.[a-zA-Z])?)?(\.?mycompany\.com)$/", $testEmail) > 0) 
+0

ありがとうございますが、私はエスケープでも動作しているとは思いません。 – dangerChihuahua007

+0

@DavidFaux - 今すぐお試しください。私はあなたの質問であなたが与えた3つのダミーの電子メールアドレスでそれをテストし、それらのすべてのために働く。 –

2
  1. あり、電子メールの検証のための組み込み関数 - filter_var() - 少なくともべきあなたの正規表現に反対して例99%で正しく動作します。
  2. 使用parse_url() functionメールアドレスからホスト名を取得し、それがmycompany.comで終わるかどうかを確認します

    $hostname = parse_url($email, PHP_URL_HOST); 
    
    if (substr($hostname, strlen('mycompany.com') * -1)) == 'mycompany.com') { 
        // ends with "mycompany.com" 
    } 
    
  3. 指定したメールアドレスは、あなたの基準を満たしているかどうかをチェックするために、上記の組み合わせ。

+1

+1 OPには1つの問題しかありません(: –

3

あなたはジャックManeyによって提案された修正を行うと仮定:

「@」の文字が一致している

た後、あなたは

[a-zA-Z0-9-]+\.[a-zA-Z]+(\.?mycompany\.com)$ 

に対して一致しているので、それは「[email protected]」それは、英数字/ハイフンにマッチしなければならないので、その点に一致するように失敗し、その後、手紙、そして(。?)mycompany.com。これは、この正規表現を試して、それを修正するには

を "[email protected]" と一致します:今、 '@' の後に、それは

の0以上のインスタンスを可能に

/^[a-zA-Z0-9_-.+][email protected]([a-zA-Z0-9-]+\.)*mycompany\.com$/ 

注意を

[a-zA-Z0-9-]+\. 

サブドメインを表します。

関連する問題